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=1d438d5044561218e0dd6258f4656495d3794c53;hb=0b2d4747191bd907c8911d058263fa962cef6a6c;hp=11edfe94735cc938c7c7584473984e260bfa4c3c;hpb=3baeb167c9a92d1f915904bb956632c0aff65b2b;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 11edfe947..1d438d504 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 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2012 Mathieu Baudier + * Copyright (C) 2007-2012 Argeo GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -47,7 +47,11 @@ import org.argeo.jcr.UserJcrUtils; /** * Implements an open session in view patter: a new JCR session is created for * each request + * + * @deprecated use {@link ScopedSessionProvider} or + * {@link OpenInViewSessionProvider} */ +@Deprecated public class SimpleSessionProvider implements SessionProvider, Serializable { private static final long serialVersionUID = 2270957712453841368L; @@ -60,17 +64,25 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { private String defaultWorkspace = "default"; + private String webSessionId = null; + public Session getSession(HttpServletRequest request, Repository rep, String workspace) throws LoginException, ServletException, RepositoryException { if (openSessionInView) { - JackrabbitSession session = (JackrabbitSession) rep - .login(workspace); + JackrabbitSession session = (JackrabbitSession) login(request, rep, + workspace); if (session.getWorkspace().getName().equals(defaultWorkspace)) writeRemoteRoles(session); return session; } else { + if (webSessionId != null + && !webSessionId.equals(request.getSession().getId())) + throw new ArgeoException( + "Only session scope is supported in this mode"); + webSessionId = request.getSession().getId(); + // since sessions is transient it can't be restored from the session if (sessions == null) sessions = Collections @@ -78,8 +90,11 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { if (!sessions.containsKey(workspace)) { try { - JackrabbitSession session = (JackrabbitSession) rep.login( - null, workspace); + // JackrabbitSession session = (JackrabbitSession) + // rep.login( + // null, workspace); + JackrabbitSession session = (JackrabbitSession) login( + request, rep, workspace); if (session.getWorkspace().getName() .equals(defaultWorkspace)) writeRemoteRoles(session); @@ -95,7 +110,7 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { Session session = sessions.get(workspace); if (!session.isLive()) { sessions.remove(workspace); - session = rep.login(null, workspace); + session = login(request, rep, workspace); sessions.put(workspace, session); } return session; @@ -103,6 +118,15 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { } } + protected Session login(HttpServletRequest request, Repository repository, + String workspace) throws RepositoryException { + if (log.isDebugEnabled()) + log.debug("Login to workspace " + + (workspace == null ? "" : workspace) + + " in web session " + request.getSession().getId()); + return repository.login(workspace); + } + protected void writeRemoteRoles(JackrabbitSession session) throws RepositoryException { // FIXME better deal w/ non node repo @@ -153,26 +177,26 @@ public class SimpleSessionProvider implements SessionProvider, Serializable { if (log.isTraceEnabled()) log.trace("Releasing JCR session " + session); if (openSessionInView) { - if (session.isLive()) { - session.logout(); - if (log.isTraceEnabled()) - log.trace("Logged out remote JCR session " + session); - } + JcrUtils.logoutQuietly(session); + if (log.isDebugEnabled()) + log.debug("Logged out remote JCR session " + session); } } public void init() { + if (log.isDebugEnabled()) + log.debug("Init session provider for web session " + webSessionId); } public void destroy() { + if (log.isDebugEnabled()) + log.debug("Destroy session provider for web session " + + webSessionId); + 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 remote JCR session " + session); - } + JcrUtils.logoutQuietly(session); } }