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=aa9bfa5d6f16fd7e492bf9014d5301dcba426935;hb=a171094436482fa16e8da47d5501df59ec06e595;hp=ded491510f819b02da138761e28f7c38b1bc74bd;hpb=5cbd14f6688e8710bff2f853e9fce3fae68c175e;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 ded491510..aa9bfa5d6 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 @@ -5,7 +5,6 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import javax.jcr.Credentials; import javax.jcr.LoginException; import javax.jcr.Repository; import javax.jcr.RepositoryException; @@ -16,6 +15,7 @@ import javax.servlet.http.HttpServletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.jackrabbit.server.SessionProvider; +import org.argeo.ArgeoException; /** To be injected, typically of scope="session" */ public class SimpleSessionProvider implements SessionProvider, Serializable { @@ -24,24 +24,32 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { private final static Log log = LogFactory .getLog(SimpleSessionProvider.class); - private transient Map sessions = Collections - .synchronizedMap(new HashMap()); - - private Credentials credentials = null; + private transient Map sessions; 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)) { - Session session = rep.login(credentials, workspace); - sessions.put(workspace, session); - return session; + 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(credentials, workspace); + session = rep.login(null, workspace); sessions.put(workspace, session); } return session; @@ -49,17 +57,22 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { } public void releaseSession(Session session) { - if (log.isDebugEnabled()) - log.debug("Releasing JCR session " + session); - // session.logout(); - // FIXME: find a way to log out when the HTTP session is expired + if (log.isTraceEnabled()) + log.trace("Releasing JCR session " + session); + } + + public void init() { } public void dispose() { - for (String workspace : sessions.keySet()) { - Session session = sessions.get(workspace); - if (session.isLive()) - session.logout(); - } + if (sessions != null) + for (String workspace : sessions.keySet()) { + Session session = sessions.get(workspace); + if (session.isLive()) { + session.logout(); + if (log.isDebugEnabled()) + log.debug("Logged out JCR session " + session); + } + } } }