Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageDAO.java =================================================================== diff -u -r2b4141f8f15fe552ea1ba29d0b302544943cb6b0 -r08fe875b45ad68995664f316c1ed602b30ca2f42 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageDAO.java (.../IMessageDAO.java) (revision 2b4141f8f15fe552ea1ba29d0b302544943cb6b0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageDAO.java (.../IMessageDAO.java) (revision 08fe875b45ad68995664f316c1ed602b30ca2f42) @@ -10,6 +10,8 @@ void update(Message message); + Message getByIdForUpdate(Long messageId); + Message getById(Long messageId); /** Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/MessageDao.java =================================================================== diff -u -r2b4141f8f15fe552ea1ba29d0b302544943cb6b0 -r08fe875b45ad68995664f316c1ed602b30ca2f42 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/MessageDao.java (.../MessageDao.java) (revision 2b4141f8f15fe552ea1ba29d0b302544943cb6b0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/MessageDao.java (.../MessageDao.java) (revision 08fe875b45ad68995664f316c1ed602b30ca2f42) @@ -27,6 +27,7 @@ import java.util.List; +import org.hibernate.LockOptions; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.tool.forum.persistence.IMessageDAO; import org.lamsfoundation.lams.tool.forum.persistence.Message; @@ -66,6 +67,11 @@ } @Override + public Message getByIdForUpdate(Long messageId) { + return (Message) getSession().get(Message.class, messageId, LockOptions.UPGRADE); + } + + @Override public Message getById(Long messageId) { return (Message) getSession().get(Message.class, messageId); } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java =================================================================== diff -u -r2b4141f8f15fe552ea1ba29d0b302544943cb6b0 -r08fe875b45ad68995664f316c1ed602b30ca2f42 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 2b4141f8f15fe552ea1ba29d0b302544943cb6b0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java (.../ForumService.java) (revision 08fe875b45ad68995664f316c1ed602b30ca2f42) @@ -299,6 +299,10 @@ return message; } + private Message getMessageForUpdate(Long messageUid) throws PersistenceException { + return messageDao.getByIdForUpdate(messageUid); + } + public Message getMessage(Long messageUid) throws PersistenceException { return messageDao.getById(messageUid); } @@ -333,7 +337,7 @@ @Override public Message replyTopic(Long parentId, Long sessionId, Message replyMessage) throws PersistenceException { // set parent - Message parent = this.getMessage(parentId); + Message parent = this.getMessageForUpdate(parentId); replyMessage.setParent(parent); replyMessage.setForum(parent.getForum()); // parent sessionID maybe empty if created by author role. So given sessionId is exactly value. Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java =================================================================== diff -u -rac12c171d18673d283c3304f1333ebb00e3819d0 -r08fe875b45ad68995664f316c1ed602b30ca2f42 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java (.../LearningAction.java) (revision ac12c171d18673d283c3304f1333ebb00e3819d0) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java (.../LearningAction.java) (revision 08fe875b45ad68995664f316c1ed602b30ca2f42) @@ -661,7 +661,7 @@ * @return * @throws InterruptedException */ - private synchronized ActionForward replyTopic(ActionMapping mapping, ActionForm form, HttpServletRequest request, + private ActionForward replyTopic(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws InterruptedException { MessageForm messageForm = (MessageForm) form;