Merge fix https://www.argeo.org/bugzilla/show_bug.cgi?id=162
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 4 Jun 2013 14:29:03 +0000 (14:29 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 4 Jun 2013 14:29:03 +0000 (14:29 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@6328 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/runtime/org.argeo.server.jcr/src/main/java/org/argeo/jcr/proxy/AbstractUrlProxy.java

index 7692163e3a008a5ea4b70f71fc34e9933c68c93f..8a66f3102dccebf1a1adb76e3c9accede7673f32 100644 (file)
@@ -78,18 +78,24 @@ public abstract class AbstractUrlProxy implements ResourceProxy {
        public Node proxy(String path) {
                // we open a JCR session with client credentials in order not to use the
                // admin session in multiple thread or make it a bottleneck.
+               Node nodeAdmin = null;
+               Node nodeClient = null;
                Session clientSession = null;
                try {
                        clientSession = jcrRepository.login(proxyWorkspace);
                        if (!clientSession.itemExists(path)
                                        || shouldUpdate(clientSession, path)) {
-                               Node nodeT = retrieveAndSave(path);
-                               if (nodeT == null)
-                                       return null;
-                       }
-                       return clientSession.getNode(path);
+                               nodeAdmin = retrieveAndSave(path);
+                               if (nodeAdmin != null)
+                                       nodeClient = clientSession.getNode(path);
+                       } else
+                               nodeClient = clientSession.getNode(path);
+                       return nodeClient;
                } catch (RepositoryException e) {
                        throw new ArgeoException("Cannot proxy " + path, e);
+               } finally {
+                       if (nodeClient == null)
+                               JcrUtils.logoutQuietly(clientSession);
                }
        }