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;fp=server%2Fruntime%2Forg.argeo.server.jackrabbit%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjackrabbit%2Fremote%2FSimpleSessionProvider.java;h=0cf59d5f9d629f71ace82e5588a9ccc15b9682b1;hb=e9a9b6690808723800226bde4280d4f693035a2e;hp=74b96e9edd45436c0a7cb4869d8fe36884319619;hpb=64a32ea948b28feb6b0ceb389cfc3e6e3bb007c6;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 74b96e9ed..0cf59d5f9 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 @@ -29,8 +29,8 @@ import org.argeo.jcr.ArgeoNames; import org.argeo.jcr.JcrUtils; /** - * To be injected, typically of scope="session". Implements an open session in - * view patter: a new JCR session is created for each request + * Implements an open session in view patter: a new JCR session is created for + * each request */ public class SimpleSessionProvider implements SessionProvider, Serializable { private static final long serialVersionUID = 2270957712453841368L; @@ -51,7 +51,8 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { if (openSessionInView) { JackrabbitSession session = (JackrabbitSession) rep .login(workspace); - writeRemoteRoles(session); + if (!workspace.equals(securityWorkspace)) + writeRemoteRoles(session); return session; } else { // since sessions is transient it can't be restored from the session @@ -63,7 +64,8 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { try { JackrabbitSession session = (JackrabbitSession) rep.login( null, workspace); - writeRemoteRoles(session); + if (!workspace.equals(securityWorkspace)) + writeRemoteRoles(session); if (log.isTraceEnabled()) log.trace("User " + session.getUserID() + " logged into " + request.getServletPath()); @@ -86,9 +88,6 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { protected void writeRemoteRoles(JackrabbitSession session) throws RepositoryException { - if (!session.getWorkspace().getName().equals(securityWorkspace)) - return; - // retrieve roles String userId = session.getUserID(); UserManager userManager = session.getUserManager(); @@ -147,7 +146,7 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { public void init() { } - public void dispose() { + public void destroy() { if (sessions != null) for (String workspace : sessions.keySet()) { Session session = sessions.get(workspace); @@ -158,4 +157,18 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { } } } + + /** + * If set to true a new session will be created each time (the default), + * otherwise a single session is cached by workspace and the object should + * be of scope session (not supported) + */ + public void setOpenSessionInView(Boolean openSessionInView) { + this.openSessionInView = openSessionInView; + } + + public void setSecurityWorkspace(String securityWorkspace) { + this.securityWorkspace = securityWorkspace; + } + }