1 package org
.argeo
.cms
.internal
.http
;
3 import java
.io
.Serializable
;
4 import java
.util
.LinkedHashMap
;
6 import javax
.jcr
.Repository
;
7 import javax
.jcr
.RepositoryException
;
8 import javax
.jcr
.Session
;
9 import javax
.servlet
.ServletException
;
10 import javax
.servlet
.http
.HttpServletRequest
;
12 import org
.apache
.commons
.logging
.Log
;
13 import org
.apache
.commons
.logging
.LogFactory
;
14 import org
.apache
.jackrabbit
.server
.SessionProvider
;
15 import org
.argeo
.cms
.internal
.auth
.CmsSessionImpl
;
16 import org
.argeo
.jcr
.JcrUtils
;
19 * Implements an open session in view patter: a new JCR session is created for
22 public class CmsSessionProvider
implements SessionProvider
, Serializable
{
23 private static final long serialVersionUID
= -1358136599534938466L;
25 private final static Log log
= LogFactory
.getLog(CmsSessionProvider
.class);
27 private final String alias
;
29 private LinkedHashMap
<Session
, CmsSessionImpl
> cmsSessions
= new LinkedHashMap
<>();
31 public CmsSessionProvider(String alias
) {
35 public Session
getSession(HttpServletRequest request
, Repository rep
, String workspace
)
36 throws javax
.jcr
.LoginException
, ServletException
, RepositoryException
{
38 // a client is scanning parent URLs.
39 // if (workspace == null)
42 CmsSessionImpl cmsSession
= WebCmsSessionImpl
.getCmsSession(request
);
43 if (log
.isTraceEnabled()) {
44 log
.trace("Get JCR session from " + cmsSession
);
46 if (cmsSession
== null)
47 throw new IllegalStateException("Cannot find a session for request " + request
.getRequestURI());
48 Session session
= cmsSession
.getDataSession(alias
, workspace
, rep
);
49 cmsSessions
.put(session
, cmsSession
);
53 public void releaseSession(Session session
) {
54 // JcrUtils.logoutQuietly(session);
55 if (cmsSessions
.containsKey(session
)) {
56 CmsSessionImpl cmsSession
= cmsSessions
.get(session
);
57 cmsSession
.releaseDataSession(alias
, session
);
59 log
.warn("JCR session " + session
+ " not found in CMS session list. Logging it out...");
60 JcrUtils
.logoutQuietly(session
);