Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolActivity.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolActivity.java,v diff -u -r1.44.2.5 -r1.44.2.6 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolActivity.java 11 May 2016 07:07:21 -0000 1.44.2.5 +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/ToolActivity.java 15 Dec 2016 11:46:15 -0000 1.44.2.6 @@ -59,7 +59,7 @@ private Tool tool; /** List of sessions associated with this ToolActivity */ - private Set toolSessions; + private Set toolSessions; private Set competenceMappings; @@ -290,15 +290,15 @@ /** * @return Returns the toolSessions. */ - public Set getToolSessions() { + public Set getToolSessions() { return toolSessions; } /** * @param toolSessions * The toolSessions to set. */ - public void setToolSessions(Set toolSessions) { + public void setToolSessions(Set toolSessions) { this.toolSessions = toolSessions; } Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java,v diff -u -r1.45.2.11 -r1.45.2.12 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java 27 Sep 2016 06:22:54 -0000 1.45.2.11 +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java 15 Dec 2016 11:46:15 -0000 1.45.2.12 @@ -95,7 +95,7 @@ public void setApplicationContext(ApplicationContext context) throws BeansException { this.context = context; } - + public void setActivityDAO(IActivityDAO activityDAO) { this.activityDAO = activityDAO; } @@ -152,7 +152,6 @@ // if haven't found an existing tool session then create one if (toolSession == null) { - if (LamsCoreToolService.log.isDebugEnabled()) { LamsCoreToolService.log.debug("Creating tool session for [" + activity.getActivityId() + "," + activity.getTitle() + "] for learner [" + learner.getLogin() + "] lesson [" @@ -162,11 +161,14 @@ toolSession = activity.createToolSessionForActivity(messageService, learner, lesson); toolSessionDAO.saveToolSession(toolSession); - return toolSession; + // create a session on tool side within the same transaction, + // otherwise core session can exist but tool's one not + // and a learner entering an activity will get an error + activity.getToolSessions().add(toolSession); + notifyToolsToCreateSession(toolSession, activity); } - // indicate that we found an existing tool session by returning null - return null; + return toolSession; } @Override @@ -638,7 +640,6 @@ return null; } - @Override public Long getLessonMaxPossibleMark(Lesson lesson) { // calculate lesson's MaxPossibleMark @@ -652,7 +653,7 @@ } return lessonMaxPossibleMark; } - + /** * Returns lesson tool activities. It works almost the same as lesson.getLearningDesign().getActivities() except it * solves problem with first activity unable to cast to ToolActivity.