Index: lams_common/src/java/org/lamsfoundation/lams/commonContext.xml
===================================================================
diff -u -r5540073d41b09023132de765ea353e297a50e524 -r31bce49235ce48b8f2b5367aa7153d4341664287
--- lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 5540073d41b09023132de765ea353e297a50e524)
+++ lams_common/src/java/org/lamsfoundation/lams/commonContext.xml (.../commonContext.xml) (revision 31bce49235ce48b8f2b5367aa7153d4341664287)
@@ -555,8 +555,9 @@
- PROPAGATION_REQUIRED,readOnly
- PROPAGATION_REQUIRED,readOnly
+ PROPAGATION_REQUIRED
+ PROPAGATION_REQUIRED
+ PROPAGATION_REQUIRED
Index: lams_common/src/java/org/lamsfoundation/lams/security/SecurityDAO.java
===================================================================
diff -u -r8830dd5050d233d69e83a761594e3ef9ed30b028 -r31bce49235ce48b8f2b5367aa7153d4341664287
--- lams_common/src/java/org/lamsfoundation/lams/security/SecurityDAO.java (.../SecurityDAO.java) (revision 8830dd5050d233d69e83a761594e3ef9ed30b028)
+++ lams_common/src/java/org/lamsfoundation/lams/security/SecurityDAO.java (.../SecurityDAO.java) (revision 31bce49235ce48b8f2b5367aa7153d4341664287)
@@ -24,8 +24,7 @@
import java.io.Serializable;
-import org.hibernate.Query;
-import org.hibernate.SQLQuery;
+import org.hibernate.query.Query;
import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO;
import org.lamsfoundation.lams.lesson.Lesson;
import org.lamsfoundation.lams.usermanagement.Organisation;
@@ -75,11 +74,8 @@
@Override
public boolean hasOrgRole(Integer orgId, Integer userId, String... roles) {
- Query query = getSession().createQuery(SecurityDAO.CHECK_ORG_ROLE);
- query.setParameter("orgId", orgId);
- query.setParameter("userId", userId);
- query.setParameterList("roles", roles);
- return !query.setCacheable(true).list().isEmpty();
+ return !doFindByNamedParam(SecurityDAO.CHECK_ORG_ROLE, new String[] { "orgId", "userId", "roles" },
+ new Object[] { orgId, userId, roles }).isEmpty();
}
@Override
@@ -96,9 +92,9 @@
@Override
public boolean isLessonLearner(Long lessonId, Integer userId) {
- SQLQuery query = getSession().createSQLQuery(SecurityDAO.CHECK_LESSON_LEARNER);
- query.setLong("lessonId", lessonId);
- query.setInteger("user_id", userId);
+ Query query = getSession().createSQLQuery(SecurityDAO.CHECK_LESSON_LEARNER);
+ query.setParameter("lessonId", lessonId);
+ query.setParameter("user_id", userId);
return !query.list().isEmpty();
}
Index: lams_learning/src/java/org/lamsfoundation/lams/learning/presence/PresenceWebsocketServer.java
===================================================================
diff -u -rf3e44aee5373a1233080ea5acd1cb5959bb46544 -r31bce49235ce48b8f2b5367aa7153d4341664287
--- lams_learning/src/java/org/lamsfoundation/lams/learning/presence/PresenceWebsocketServer.java (.../PresenceWebsocketServer.java) (revision f3e44aee5373a1233080ea5acd1cb5959bb46544)
+++ lams_learning/src/java/org/lamsfoundation/lams/learning/presence/PresenceWebsocketServer.java (.../PresenceWebsocketServer.java) (revision 31bce49235ce48b8f2b5367aa7153d4341664287)
@@ -1,6 +1,7 @@
package org.lamsfoundation.lams.learning.presence;
import java.io.IOException;
+import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@@ -121,6 +122,10 @@
try {
ArrayNode rosterJSON = roster.getRosterJSON();
for (Session websocket : lessonWebsockets) {
+ if (!websocket.isOpen()) {
+ PresenceWebsocketServer.removeWebsocket(websocket, lessonWebsockets);
+ continue;
+ }
// if this run is meant only for one learner, skip the others
String websocketNickName = (String) websocket.getUserProperties().get(PARAM_NICKNAME);
if ((nickName != null) && !nickName.equals(websocketNickName)) {
@@ -279,14 +284,7 @@
public void unregisterUser(Session websocket) {
Long lessonId = (Long) websocket.getUserProperties().get(AttributeNames.PARAM_LESSON_ID);
Set lessonWebsockets = PresenceWebsocketServer.websockets.get(lessonId);
- Iterator sessionIterator = lessonWebsockets.iterator();
- while (sessionIterator.hasNext()) {
- Session storedSession = sessionIterator.next();
- if (storedSession.equals(websocket)) {
- sessionIterator.remove();
- break;
- }
- }
+ PresenceWebsocketServer.removeWebsocket(websocket, lessonWebsockets);
if (PresenceWebsocketServer.log.isDebugEnabled()) {
PresenceWebsocketServer.log.debug("User " + websocket.getUserProperties().get(PARAM_NICKNAME)
@@ -398,6 +396,20 @@
return messagesJSON;
}
+ private static void removeWebsocket(Session websocket, Collection lessonWebsockets) {
+ if (lessonWebsockets == null) {
+ return;
+ }
+ Iterator sessionIterator = lessonWebsockets.iterator();
+ while (sessionIterator.hasNext()) {
+ Session storedSession = sessionIterator.next();
+ if (storedSession.equals(websocket)) {
+ sessionIterator.remove();
+ break;
+ }
+ }
+ }
+
private static ObjectNode buildMessageJSON(PresenceChatMessage message) {
ObjectNode messageJSON = JsonNodeFactory.instance.objectNode();
messageJSON.put("uid", message.getUid());