Index: TestHarness4LAMS2/src/org/lamsfoundation/testharness/Call.java =================================================================== diff -u -r5773f84ed608838de3521ecde87c52f3c72d478c -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- TestHarness4LAMS2/src/org/lamsfoundation/testharness/Call.java (.../Call.java) (revision 5773f84ed608838de3521ecde87c52f3c72d478c) +++ TestHarness4LAMS2/src/org/lamsfoundation/testharness/Call.java (.../Call.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -267,9 +267,10 @@ } catch (Exception e) { throw new RuntimeException(e); } finally { - TestReporter.addCallRecord(new CallRecord(test.getTestSuite().getSuiteIndex(), test.testName, callee, - description, new SimpleDateFormat("HH:mm:ss SSS").format(new Date(end)), end - start, - httpStatusCode, message)); + TestReporter.getCallRecords() + .add(new CallRecord(test.getTestSuite().getSuiteIndex(), test.testName, callee, description, + new SimpleDateFormat("HH:mm:ss SSS").format(new Date(end)), end - start, httpStatusCode, + message)); } } Index: TestHarness4LAMS2/src/org/lamsfoundation/testharness/TestReporter.java =================================================================== diff -u -r5773f84ed608838de3521ecde87c52f3c72d478c -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- TestHarness4LAMS2/src/org/lamsfoundation/testharness/TestReporter.java (.../TestReporter.java) (revision 5773f84ed608838de3521ecde87c52f3c72d478c) +++ TestHarness4LAMS2/src/org/lamsfoundation/testharness/TestReporter.java (.../TestReporter.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -33,6 +33,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.text.SimpleDateFormat; +import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.LinkedList; @@ -324,15 +325,11 @@ .append("Refer to the formal test report document for the details.").append(TestReporter.NEW_LINE) .append("\n*****************************************************************************************\n") .toString(); - private static List callRecords = new LinkedList(); + private static List callRecords = Collections.synchronizedList(new LinkedList()); private static String fileName; private static String fileTemplate; - public static synchronized void addCallRecord(CallRecord callRecord) { - TestReporter.callRecords.add(callRecord); - } - public static void generateReportFile(TestManager manager) { TestReporter.log.info("Generating the formal test report document"); TemplateCompiler.init(manager.testSuites, TestReporter.callRecords); @@ -409,10 +406,6 @@ return ((TestReporter.fileName != null) && (TestReporter.fileTemplate != null)); } - public static void setCallRecords(List callRecords) { - TestReporter.callRecords = callRecords; - } - public static void setFileName(String fileName) { TestReporter.fileName = fileName; } Index: lams_central/src/java/org/lamsfoundation/lams/comments/web/CommentAction.java =================================================================== diff -u -r51fb2a37254f24bb2a805d4ffd54482c779f43fa -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- lams_central/src/java/org/lamsfoundation/lams/comments/web/CommentAction.java (.../CommentAction.java) (revision 51fb2a37254f24bb2a805d4ffd54482c779f43fa) +++ lams_central/src/java/org/lamsfoundation/lams/comments/web/CommentAction.java (.../CommentAction.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -20,7 +20,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.comments.web; import java.io.IOException; @@ -366,18 +365,8 @@ /** * Create a new comment (not a reply) - * - * @param mapping - * @param form - * @param request - * @param response - * @return - * @throws InterruptedException - * @throws JSONException - * @throws IOException - * @throws ServletException */ - private synchronized ActionForward newComment(ActionMapping mapping, ActionForm form, HttpServletRequest request, + private ActionForward newComment(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws InterruptedException, JSONException, IOException, ServletException { SessionMap sessionMap = getSessionMap(request); @@ -400,8 +389,6 @@ commentService = getCommentService(); User user = getCurrentUser(request); - boolean monitoringMode = ToolAccessMode.TEACHER - .equals(WebUtil.getToolAccessMode((String) sessionMap.get(AttributeNames.ATTR_MODE))); if (!learnerInToolSession(externalId, user) && !monitorInToolSession(externalId, user, sessionMap)) { throwException("New comment: User does not have the rights to access the comments. ", user.getLogin(), externalId, externalType, externalSignature); @@ -445,20 +432,9 @@ /** * Create a reply to a parent topic. - * - * @param mapping - * @param form - * @param request - * @param response - * @return - * @throws InterruptedException - * @throws JSONException - * @throws IOException - * @throws ServletException */ - private synchronized ActionForward replyTopicInline(ActionMapping mapping, ActionForm form, - HttpServletRequest request, HttpServletResponse response) - throws InterruptedException, JSONException, IOException, ServletException { + private ActionForward replyTopicInline(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response) throws InterruptedException, JSONException, IOException, ServletException { SessionMap sessionMap = getSessionMap(request); Long externalId = (Long) sessionMap.get(CommentConstants.ATTR_EXTERNAL_ID); @@ -594,11 +570,9 @@ /** * Update the likes/dislikes - * - * @throws ServletException */ - private synchronized ActionForward updateLikeCount(ActionMapping mapping, ActionForm form, - HttpServletRequest request, HttpServletResponse response, boolean isLike) + private ActionForward updateLikeCount(ActionMapping mapping, ActionForm form, HttpServletRequest request, + HttpServletResponse response, boolean isLike) throws InterruptedException, JSONException, IOException, ServletException { SessionMap sessionMap = getSessionMap(request); @@ -627,10 +601,8 @@ /** * Update hide flag - * - * @throws ServletException */ - private synchronized ActionForward hideComment(ActionMapping mapping, ActionForm form, HttpServletRequest request, + private ActionForward hideComment(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response, boolean isLike) throws InterruptedException, JSONException, IOException, ServletException { Index: lams_central/src/java/org/lamsfoundation/lams/webservice/RegisterAction.java =================================================================== diff -u -r51fb2a37254f24bb2a805d4ffd54482c779f43fa -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- lams_central/src/java/org/lamsfoundation/lams/webservice/RegisterAction.java (.../RegisterAction.java) (revision 51fb2a37254f24bb2a805d4ffd54482c779f43fa) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/RegisterAction.java (.../RegisterAction.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -20,7 +20,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.webservice; import java.io.IOException; @@ -75,12 +74,6 @@ /** * @author Andrey Balan - * - * - * - * - * - * */ public class RegisterAction extends HttpServlet { @@ -103,8 +96,7 @@ private static MessageService messageService = null; @Override - public synchronized void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { + public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String method = request.getParameter(CentralConstants.PARAM_METHOD); if (method.equals("addUserToGroupLessons")) { Fisheye: Tag 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 refers to a dead (removed) revision in file `lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonJoinServlet.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_central/web/WEB-INF/web.xml =================================================================== diff -u -r9eaeb8328024c0c652dd7d17372dc4caf3a5852c -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- lams_central/web/WEB-INF/web.xml (.../web.xml) (revision 9eaeb8328024c0c652dd7d17372dc4caf3a5852c) +++ lams_central/web/WEB-INF/web.xml (.../web.xml) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -243,12 +243,6 @@ - LessonJoinServlet - org.lamsfoundation.lams.webservice.xml.LessonJoinServlet - - - - forgotPasswordServlet org.lamsfoundation.lams.web.ForgotPasswordServlet @@ -492,10 +486,6 @@ /lamsstartupservlet - LessonJoinServlet - /services/xml/LessonJoin/* - - forgotPasswordServlet /ForgotPasswordRequest Index: lams_common/src/java/org/lamsfoundation/lams/learningdesign/Grouping.java =================================================================== diff -u -r51fb2a37254f24bb2a805d4ffd54482c779f43fa -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- lams_common/src/java/org/lamsfoundation/lams/learningdesign/Grouping.java (.../Grouping.java) (revision 51fb2a37254f24bb2a805d4ffd54482c779f43fa) +++ lams_common/src/java/org/lamsfoundation/lams/learningdesign/Grouping.java (.../Grouping.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -70,13 +70,13 @@ private Integer groupingUIID; /** persistent field */ - private Set groups; + private Set groups; /** persistent field */ - private Set activities; + private Set activities; /** non-persistent field */ - protected Set learners; + protected Set learners; protected Grouper grouper; /** @@ -112,11 +112,11 @@ * subclass as the grouping being copied. Does not copy the tool sessions. * Copies the groups but not users in the groups. Copies any group to * branch mappings, updating the group but not the activity. - * + * * Any implementation of this method can call copyGroupingFields(Grouping newGrouping) * to set max number of groups, grouping UIID, copy the groups * and the group to branch mappings. - * + * * @return deep copy of this object */ public abstract Grouping createCopy(int uiidOffset); @@ -143,8 +143,8 @@ } /** - * * + * */ public Long getGroupingId() { return groupingId; @@ -155,8 +155,8 @@ } /** - * * + * */ public Integer getGroupingTypeId() { if (this instanceof LessonClass) { @@ -171,13 +171,9 @@ } - /** - * - * - */ - public Set getGroups() { + public Set getGroups() { if (groups == null) { - setGroups(new TreeSet()); + setGroups(new TreeSet()); } return groups; } @@ -186,18 +182,14 @@ this.groups = groups; } - /** - * - * - */ - public Set getActivities() { + public Set getActivities() { if (activities == null) { - setActivities(new TreeSet(new ActivityOrderComparator())); + setActivities(new TreeSet(new ActivityOrderComparator())); } return activities; } - public void setActivities(Set activities) { + public void setActivities(Set activities) { this.activities = activities; } @@ -224,7 +216,7 @@ } /** - * + * */ public Integer getMaxNumberOfGroups() { return maxNumberOfGroups; @@ -252,35 +244,34 @@ /** * Return the next group order id. Can't do it on size as groups may have been deleted. * Returns -1 if the proposed name is the same as existing name - * + * Synchronisation is not perfect here as the same order ID can be picked up before the new Group gets created + * and added to groups collection. + * * @return the next order id. */ - public synchronized int getNextGroupOrderIdCheckName(String proposedName) { + synchronized int getNextGroupOrderIdCheckName(String proposedName) { int maxOrderId = 0; - if (this.getGroups() != null) { - Iterator iter = this.getGroups().iterator(); - while (iter.hasNext()) { - Group element = (Group) iter.next(); - maxOrderId = element.getOrderId() > maxOrderId ? element.getOrderId() : maxOrderId; - if (proposedName.equals(element.getGroupName())) { - return -1; - } + for (Group group : getGroups()) { + if (proposedName.equals(group.getGroupName())) { + return -1; } + if (group.getOrderId() > maxOrderId) { + maxOrderId = group.getOrderId(); + } } return ++maxOrderId; } /** * Return all the learners who participate this grouping. - * + * * @return the learners set. */ - public Set getLearners() { + public Set getLearners() { - learners = new HashSet(); - for (Iterator i = getGroups().iterator(); i.hasNext();) { - Group group = (Group) i.next(); + learners = new HashSet(); + for (Group group : groups) { if (isLearnerGroup(group)) { learners.addAll(group.getUsers()); } @@ -290,7 +281,7 @@ /** * Returns the group that current learner is in. - * + * * @param learner * the user in the group * @return the group that has the learner @@ -308,7 +299,7 @@ /** * Iterate through all the groups in this grouping and figure out the group * with the least members in it. - * + * * @return the group with the least member. */ public Group getGroupWithLeastMember() { @@ -328,14 +319,14 @@ /** * Is this group a learner group. It is also possible that the group is a * staff group. - * + * * @return whether the group is learner group or not. */ public abstract boolean isLearnerGroup(Group group); /** * Return whether a learner is a existing learner for this grouping or not. - * + * * @param learner * the current leaner * @return the boolean result Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/LamsCoreToolService.java (.../LamsCoreToolService.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -133,8 +133,11 @@ // Service Methods // --------------------------------------------------------------------- + /** + * Creates a tool session for the given activity. + */ @Override - public synchronized ToolSession createToolSession(User learner, ToolActivity activity, Lesson lesson) + public ToolSession createToolSession(User learner, ToolActivity activity, Lesson lesson) throws RequiredGroupMissingException, DataIntegrityViolationException { // look for an existing applicable tool session // could be either a grouped (class group or standard group) or an individual. @@ -315,7 +318,7 @@ } else if (activity.isGroupingActivity()) { GroupingActivity groupingActivity = (GroupingActivity) activity; Grouping grouping = groupingActivity.getCreateGrouping(); - for (Group group : (Set) grouping.getGroups()) { + for (Group group : grouping.getGroups()) { if (!group.getUsers().isEmpty()) { return true; } @@ -486,10 +489,9 @@ throw new ToolException(message, e); } } - + @Override - public List getOutputsFromTool(String conditionName, ToolActivity toolActivity) - throws ToolException { + public List getOutputsFromTool(String conditionName, ToolActivity toolActivity) throws ToolException { if (toolActivity == null) { String error = "The toolActivity is null. Unable to get tool outputs"; Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/CrNode.java =================================================================== diff -u -r51fb2a37254f24bb2a805d4ffd54482c779f43fa -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/CrNode.java (.../CrNode.java) (revision 51fb2a37254f24bb2a805d4ffd54482c779f43fa) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/CrNode.java (.../CrNode.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -312,9 +312,7 @@ * uuid, and the db can't help us there. */ public synchronized Long incrementNextVersionId() { - Long retValue = nextVersionId; - nextVersionId = new Long(nextVersionId.longValue() + 1); - return retValue; + return nextVersionId++; } /** Index: lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java =================================================================== diff -u -rd19a95db673b7cf90351de4d567299c5fa86b450 -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision d19a95db673b7cf90351de4d567299c5fa86b450) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/service/LearnerService.java (.../LearnerService.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -265,7 +265,7 @@ * in case of problems. */ @Override - public synchronized LearnerProgress joinLesson(Integer learnerId, Long lessonID) { + public LearnerProgress joinLesson(Integer learnerId, Long lessonID) { User learner = (User) userManagementService.findById(User.class, learnerId); Lesson lesson = getLesson(lessonID); @@ -596,9 +596,13 @@ * @return the updated learner progress */ @Override - public synchronized LearnerProgress completeActivity(Integer learnerId, Activity activity, - LearnerProgress progress) { - LearnerProgress nextLearnerProgress = null; + public LearnerProgress completeActivity(Integer learnerId, Activity activity, LearnerProgress progress) { + // load the progress again from DB + LearnerProgress nextLearnerProgress = learnerProgressDAO.getLearnerProgress(progress.getLearnerProgressId()); + if (nextLearnerProgress.getCompletedActivities().keySet().contains(activity)) { + // progress was already updated by another thread, so prevent double processing + return nextLearnerProgress; + } // Need to synchronise the next bit of code so that if the tool calls // this twice in quick succession, with the same parameters, it won't update @@ -768,7 +772,7 @@ } else { if (grouping.getGroups().size() > 0) { // if any group exists, put them in there. - Group aGroup = (Group) grouping.getGroups().iterator().next(); + Group aGroup = grouping.getGroups().iterator().next(); if (aGroup.getGroupId() != null) { lessonService.performGrouping(grouping, aGroup.getGroupId(), learnerList); } else { Index: lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java =================================================================== diff -u -r51fb2a37254f24bb2a805d4ffd54482c779f43fa -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision 51fb2a37254f24bb2a805d4ffd54482c779f43fa) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/web/action/LoadToolActivityAction.java (.../LoadToolActivityAction.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -21,7 +21,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.learning.web.action; import java.util.Map; @@ -43,7 +42,6 @@ import org.lamsfoundation.lams.lesson.LearnerProgress; import org.lamsfoundation.lams.tool.exception.RequiredGroupMissingException; import org.lamsfoundation.lams.web.action.LamsAction; -import org.springframework.transaction.UnexpectedRollbackException; /** * Action class to forward the user to a Tool using an intermediate loading page. Can handle regular tools + grouping @@ -90,33 +88,34 @@ * there is no point in repeating a failed attempt to create it. * * The synchronisation code below prevents threads from creating sessions at the same time. + * + * + * Object toolSessionCreationLock = null; + * synchronized (LoadToolActivityAction.toolSessionCreationLocks) { + * toolSessionCreationLock = LoadToolActivityAction.toolSessionCreationLocks.get(activityID); + * if (toolSessionCreationLock == null) { + * toolSessionCreationLock = activityID; + * LoadToolActivityAction.toolSessionCreationLocks.put(activityID, toolSessionCreationLock); + * } + * } + * synchronized (toolSessionCreationLock) { */ - Object toolSessionCreationLock = null; - Long activityID = activity.getActivityId(); - synchronized (LoadToolActivityAction.toolSessionCreationLocks) { - toolSessionCreationLock = LoadToolActivityAction.toolSessionCreationLocks.get(activityID); - if (toolSessionCreationLock == null) { - toolSessionCreationLock = activityID; - LoadToolActivityAction.toolSessionCreationLocks.put(activityID, toolSessionCreationLock); - } - } - synchronized (toolSessionCreationLock) { - try { - learnerService.createToolSessionsIfNecessary(activity, learnerProgress); + try { + learnerService.createToolSessionsIfNecessary(activity, learnerProgress); - } catch (UnexpectedRollbackException e) { - LamsAction.log.warn("Got exception while trying to create a tool session, but carrying on.", e); + /* + * } catch (UnexpectedRollbackException e) { + * LamsAction.log.warn("Got exception while trying to create a tool session, but carrying on.", e); + */ + } catch (RequiredGroupMissingException e) { - } catch (RequiredGroupMissingException e) { - - //got here when activity requires existing grouping but no group for user exists yet - LamsAction.log.warn(e.getMessage()); - request.setAttribute("messageKey", e.getMessage()); - return mapping.findForward("message"); - } + //got here when activity requires existing grouping but no group for user exists yet + LamsAction.log.warn(e.getMessage()); + request.setAttribute("messageKey", e.getMessage()); + return mapping.findForward("message"); } - form.setActivityID(activityID); + form.setActivityID(activity.getActivityId()); String mappingName = "displayTool"; if (activity.isToolActivity() || activity.isSystemToolActivity()) { Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java =================================================================== diff -u -rce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3 -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision ce9f4e0c6d1e5814bf0dcb0fa16ae888a8c854a3) +++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/service/ChatService.java (.../ChatService.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -21,7 +21,6 @@ * **************************************************************** */ - package org.lamsfoundation.lams.tool.chat.service; import java.util.ArrayList; @@ -194,7 +193,7 @@ public ToolOutput getToolOutput(String name, Long toolSessionId, Long learnerId) { return getChatOutputFactory().getToolOutput(name, this, toolSessionId, learnerId); } - + @Override public List getToolOutputs(String name, Long toolContentId) { return new ArrayList(); @@ -543,28 +542,29 @@ } @Override - public synchronized ChatUser createChatUser(UserDTO user, ChatSession chatSession) { + public ChatUser createChatUser(UserDTO user, ChatSession chatSession) { ChatUser chatUser = new ChatUser(user, chatSession); chatUser.setNickname(createNickname(chatUser)); saveOrUpdateChatUser(chatUser); return chatUser; } - private String createNickname(ChatUser chatUser) { - String desiredNickname = chatUser.getFirstName() + " " + chatUser.getLastName(); + private synchronized String createNickname(ChatUser chatUser) { + String desiredNickname = chatUser.getFirstName() + " " + chatUser.getLastName() + " "; String nickname = desiredNickname; boolean valid = false; int count = 1; + Long sessionId = chatUser.getChatSession().getSessionId(); // TODO may need max tries to prevent possibly entering infinite loop. while (!valid) { - if (getUserByNicknameAndSessionID(nickname, chatUser.getChatSession().getSessionId()) == null) { + if (getUserByNicknameAndSessionID(nickname, sessionId) == null) { // nickname is available valid = true; } else { - nickname = desiredNickname + " " + count; + nickname = desiredNickname + count; count++; } } Index: lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java =================================================================== diff -u -r3399163940c61c9132223c758d274486e57ff9b7 -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java (.../LearningAction.java) (revision 3399163940c61c9132223c758d274486e57ff9b7) +++ lams_tool_forum/src/java/org/lamsfoundation/lams/tool/forum/web/actions/LearningAction.java (.../LearningAction.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -775,15 +775,8 @@ /** * Create a replayed topic for a parent topic. - * - * @param mapping - * @param form - * @param request - * @param response - * @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; @@ -828,17 +821,8 @@ /** * Create a replayed topic for a parent topic. - * - * @param mapping - * @param form - * @param request - * @param response - * @return - * @throws InterruptedException - * @throws JSONException - * @throws IOException */ - private synchronized ActionForward replyTopicInline(ActionMapping mapping, ActionForm form, + private ActionForward replyTopicInline(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws InterruptedException, JSONException, IOException { Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java =================================================================== diff -u -rc7be3e04ca9eb761dc695108e204568bb55f99b0 -r654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision c7be3e04ca9eb761dc695108e204568bb55f99b0) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/action/LearningAction.java (.../LearningAction.java) (revision 654c98e30631f9b0cb5bd4ebab7d82b2cfb8e384) @@ -465,11 +465,7 @@ return mapping.findForward(ScratchieConstants.SUCCESS); } - /** - * @throws ServletException - * @throws ScratchieApplicationException - */ - private synchronized ActionForward like(ActionMapping mapping, ActionForm form, HttpServletRequest request, + private ActionForward like(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws JSONException, IOException, ServletException, ScratchieApplicationException { initializeScratchieService(); @@ -497,11 +493,7 @@ return null; } - /** - * @throws ServletException - * @throws ScratchieApplicationException - */ - private synchronized ActionForward removeLike(ActionMapping mapping, ActionForm form, HttpServletRequest request, + private ActionForward removeLike(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws JSONException, IOException, ServletException, ScratchieApplicationException { initializeScratchieService();