Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageDAO.java =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/Attic/IMessageDAO.java,v diff -u -r1.1.2.2 -r1.1.2.3 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageDAO.java 19 Jan 2015 21:34:30 -0000 1.1.2.2 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/IMessageDAO.java 1 Feb 2015 22:07:45 -0000 1.1.2.3 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/Attic/MessageDao.java,v diff -u -r1.1.2.2 -r1.1.2.3 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/MessageDao.java 19 Jan 2015 21:34:30 -0000 1.1.2.2 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/persistence/hibernate/MessageDao.java 1 Feb 2015 22:07:45 -0000 1.1.2.3 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java,v diff -u -r1.126.2.5 -r1.126.2.6 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java 19 Jan 2015 21:34:30 -0000 1.126.2.5 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/service/ForumService.java 1 Feb 2015 22:07:45 -0000 1.126.2.6 @@ -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 =================================================================== RCS file: /usr/local/cvsroot/lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java,v diff -u -r1.85.2.1 -r1.85.2.2 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java 30 Dec 2014 09:44:07 -0000 1.85.2.1 +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java 1 Feb 2015 22:07:45 -0000 1.85.2.2 @@ -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;