Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -rd09e2d4b292439539e658d6f19bb4807123ad9a9 -r2b850f5ba5fdab4d0b421ea1ccb0c80cf91d1445 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision d09e2d4b292439539e658d6f19bb4807123ad9a9) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 2b850f5ba5fdab4d0b421ea1ccb0c80cf91d1445) @@ -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