Make proxy more generic
[lgpl/argeo-commons.git] / 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);
                }
        }