Forcibly close already open sessions when receiving a new open session request.
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 11 Dec 2008 15:32:40 +0000 (15:32 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 11 Dec 2008 15:32:40 +0000 (15:32 +0000)
Improve logs.

ASSIGNED - bug 73: Detached getRequest crash
https://www.spartadn.com/bugzilla/show_bug.cgi?id=73

git-svn-id: https://svn.argeo.org/slc/trunk@2004 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

runtime/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedExecutionServerImpl.java

index 0a2e866a5793e2850423f162feba4df13310f88f..0cfd3113e6edfa21ab71090b1f9cae983b594d4e 100644 (file)
@@ -35,6 +35,8 @@ public class DetachedExecutionServerImpl implements DetachedExecutionServer,
        }
 
        public synchronized DetachedAnswer executeRequest(DetachedRequest request) {
+               log.info("Received request " + request);
+
                DetachedAnswer answer = null;
                try {
                        // Find action
@@ -104,10 +106,7 @@ public class DetachedExecutionServerImpl implements DetachedExecutionServer,
 
                getCurrentSession().getRequests().add(request);
                getCurrentSession().getAnswers().add(answer);
-               if (log.isDebugEnabled())
-                       log.debug("Processed '" + request.getRef() + "' (status="
-                                       + answer.getStatusAsString() + ", path="
-                                       + request.getPath() + ")");
+               log.info("Sent answer " + answer);
                return answer;
        }
 
@@ -176,10 +175,19 @@ public class DetachedExecutionServerImpl implements DetachedExecutionServer,
                        DetachedAdminCommand obj, DetachedRequest request) {
                DetachedAnswer answer;
                if (obj instanceof OpenSession) {
-                       if (getCurrentSession() != null)
-                               throw new DetachedException(
-                                               "There is already an open session #"
-                                                               + getCurrentSession().getUuid());
+                       if (getCurrentSession() != null) {
+                               // TODO: better understand why there is sometimes two open
+                               // sessions sent.
+                               log.warn("There is already an open session #"
+                                               + getCurrentSession().getUuid() + ". Closing it...");
+                               DetachedAnswer answerT = new DetachedAnswer(
+                                               request,
+                                               "Session #"
+                                                               + getCurrentSession().getUuid()
+                                                               + " forcibly closed. THIS ANSWER WAS NOT SENT BACK.");
+                               answerT.setStatus(DetachedAnswer.CLOSED_SESSION);
+                               getCurrentSession().getAnswers().add(answerT);
+                       }
                        sessions.add(((OpenSession) obj).execute(request, bundleContext));
                        answer = new DetachedAnswer(request, "Session #"
                                        + getCurrentSession().getUuid() + " open.");
@@ -226,7 +234,7 @@ public class DetachedExecutionServerImpl implements DetachedExecutionServer,
                buf.append("Current session: ").append(getCurrentSession())
                                .append('\n');
                buf.append("Current request: ").append(requestCurrent).append('\n');
-               buf.append("Current answer: ").append(requestCurrent).append('\n');
+               buf.append("Current answer: ").append(answerCurrent).append('\n');
                buf.append("Skip count: ").append(skipCount).append('\n');
 
                buf.append("# SESSIONS\n");