Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r8fd538f0e69320e969865342d94c7c1cbc936977 -r674f70cd512803c3b58a1da3c6bb86ea5a989b90 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 8fd538f0e69320e969865342d94c7c1cbc936977) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 674f70cd512803c3b58a1da3c6bb86ea5a989b90) @@ -182,11 +182,15 @@ @Override public void createUser(ScratchieUser scratchieUser) { - ScratchieUser existingUser = getUserByIDAndSession(scratchieUser.getUserId(), + ScratchieUser user = getUserByIDAndSession(scratchieUser.getUserId(), scratchieUser.getSession().getSessionId()); - if (existingUser == null) { - scratchieUserDao.saveObject(scratchieUser); + if (user == null) { + user = scratchieUser; } + // 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. + scratchieUserDao.saveObject(user); } @Override