X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jackrabbit%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjackrabbit%2Fremote%2FSimpleSessionProvider.java;h=6647eb94bf77f958a9f5aa27884976aada8afd93;hb=22365726e2fdcb12e76c3d78060960ae7161628e;hp=aa9bfa5d6f16fd7e492bf9014d5301dcba426935;hpb=1cc72bdd463a20640986122da8e0c1ef82a6f3b0;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/remote/SimpleSessionProvider.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/remote/SimpleSessionProvider.java index aa9bfa5d6..6647eb94b 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/remote/SimpleSessionProvider.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/remote/SimpleSessionProvider.java @@ -16,6 +16,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.jackrabbit.server.SessionProvider; import org.argeo.ArgeoException; +import org.argeo.jcr.JcrUtils; /** To be injected, typically of scope="session" */ public class SimpleSessionProvider implements SessionProvider, Serializable { @@ -26,39 +27,48 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { private transient Map sessions; + private Boolean openSessionInView = true; + public Session getSession(HttpServletRequest request, Repository rep, String workspace) throws LoginException, ServletException, RepositoryException { - // since sessions is transient it can't be restored from the session - if (sessions == null) - sessions = Collections - .synchronizedMap(new HashMap()); - if (!sessions.containsKey(workspace)) { - try { - Session session = rep.login(null, workspace); - if (log.isTraceEnabled()) - log.trace("User " + session.getUserID() + " logged into " - + request.getServletPath()); - sessions.put(workspace, session); - return session; - } catch (Exception e) { - throw new ArgeoException("Cannot open session", e); - } + if (openSessionInView) { + return rep.login(workspace); } else { - Session session = sessions.get(workspace); - if (!session.isLive()) { - sessions.remove(workspace); - session = rep.login(null, workspace); - sessions.put(workspace, session); + // since sessions is transient it can't be restored from the session + if (sessions == null) + sessions = Collections + .synchronizedMap(new HashMap()); + + if (!sessions.containsKey(workspace)) { + try { + Session session = rep.login(null, workspace); + if (log.isTraceEnabled()) + log.trace("User " + session.getUserID() + + " logged into " + request.getServletPath()); + sessions.put(workspace, session); + return session; + } catch (Exception e) { + throw new ArgeoException("Cannot open session", e); + } + } else { + Session session = sessions.get(workspace); + if (!session.isLive()) { + sessions.remove(workspace); + session = rep.login(null, workspace); + sessions.put(workspace, session); + } + return session; } - return session; } } public void releaseSession(Session session) { if (log.isTraceEnabled()) log.trace("Releasing JCR session " + session); + if (openSessionInView) + JcrUtils.logoutQuietly(session); } public void init() {