Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java,v diff -u -r1.60 -r1.61 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 13 Aug 2015 13:17:20 -0000 1.60 +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java 17 Aug 2015 06:08:53 -0000 1.61 @@ -320,11 +320,15 @@ @Override public void createUser(AssessmentUser assessmentUser) { // make sure the user was not created in the meantime - AssessmentUser existingUser = getUserByIDAndSession(assessmentUser.getUserId(), + AssessmentUser user = getUserByIDAndSession(assessmentUser.getUserId(), assessmentUser.getSession().getSessionId()); - if (existingUser == null) { - assessmentUserDao.saveObject(assessmentUser); + if (user == null) { + user = assessmentUser; } + // Save it no matter if the user already exists. + // At checkLeaderSelectToolForSessionLeader() the user is added to session. + // Sometimes session save is earlier that user save in another thread, leading to an exception. + assessmentUserDao.saveObject(user); } @Override @@ -2010,7 +2014,7 @@ assessment.setTimeLimit(JsonUtil.opt(toolContentJSON, "timeLimit", 0)); assessment.setUseSelectLeaderToolOuput(JsonUtil.opt(toolContentJSON, RestTags.USE_SELECT_LEADER_TOOL_OUTPUT, Boolean.FALSE)); // submission deadline set in monitoring - + if (toolContentJSON.has("overallFeedback")) { throw new JSONException( "Assessment Tool does not support Overall Feedback for REST Authoring. " + toolContentJSON);