Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -rbdc7c7686c5795a8863fce53afdd67cf0cef3bdf -r7772ee3d75e659b6a779c34e070ec4253618dd75 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision bdc7c7686c5795a8863fce53afdd67cf0cef3bdf) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 7772ee3d75e659b6a779c34e070ec4253618dd75) @@ -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);