Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/action/LearningWebsocketServer.java =================================================================== diff -u -r7a4b493a0008b281e8c3ec7aafbd325165085ed9 -r7b5832fa8e607005c926eb10a4bf429fe185f092 --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/action/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision 7a4b493a0008b281e8c3ec7aafbd325165085ed9) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/action/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision 7b5832fa8e607005c926eb10a4bf429fe185f092) @@ -1,11 +1,9 @@ package org.lamsfoundation.lams.tool.dokumaran.web.action; import java.io.IOException; -import java.util.Collections; -import java.util.HashSet; import java.util.Map; import java.util.Set; -import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; import javax.websocket.CloseReason; import javax.websocket.CloseReason.CloseCodes; @@ -30,19 +28,18 @@ private static Logger log = Logger.getLogger(LearningWebsocketServer.class); - private static final Map> websockets = Collections - .synchronizedMap(new TreeMap>()); + private static final Map> websockets = new ConcurrentHashMap>(); /** - * Registeres the Learner for processing by SendWorker. + * Registeres the Learner for processing. */ @OnOpen public void registerUser(Session websocket) throws JSONException, IOException { Long toolContentID = Long .valueOf(websocket.getRequestParameterMap().get(AttributeNames.PARAM_TOOL_CONTENT_ID).get(0)); Set toolContentWebsockets = websockets.get(toolContentID); if (toolContentWebsockets == null) { - toolContentWebsockets = Collections.synchronizedSet(new HashSet()); + toolContentWebsockets = ConcurrentHashMap.newKeySet(); websockets.put(toolContentID, toolContentWebsockets); } toolContentWebsockets.add(websocket); @@ -73,7 +70,7 @@ : "")); } } - + /** * Monitor has added one more minute to the time limit. All learners will need * to add +1 minute to their countdown counters. @@ -83,8 +80,6 @@ if (toolContentWebsockets == null) { return; } - // make a copy of the websocket collection so it does not get blocked while sending messages - toolContentWebsockets = new HashSet(toolContentWebsockets); JSONObject responseJSON = new JSONObject(); responseJSON.put("addOneMinute", true); @@ -106,8 +101,6 @@ if (toolContentWebsockets == null) { return; } - // make a copy of the websocket collection so it does not get blocked while sending messages - toolContentWebsockets = new HashSet(toolContentWebsockets); JSONObject responseJSON = new JSONObject(); responseJSON.put("pageRefresh", true); @@ -119,5 +112,4 @@ } } } - } \ No newline at end of file