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
.auth
.CmsSession
;
18 * Implements an open session in view patter: a new JCR session is created for
21 class CmsSessionProvider
implements SessionProvider
, Serializable
{
22 private static final long serialVersionUID
= -1358136599534938466L;
24 private final static Log log
= LogFactory
.getLog(CmsSessionProvider
.class);
26 private final String alias
;
28 private LinkedHashMap
<Session
, CmsSession
> cmsSessions
= new LinkedHashMap
<>();
30 public CmsSessionProvider(String alias
) {
34 public Session
getSession(HttpServletRequest request
, Repository rep
, String workspace
)
35 throws javax
.jcr
.LoginException
, ServletException
, RepositoryException
{
37 CmsSession cmsSession
= WebCmsSessionImpl
.getCmsSession(request
);
38 Session session
= cmsSession
.getDataSession(alias
, workspace
, rep
);
39 cmsSessions
.put(session
, cmsSession
);
43 public void releaseSession(Session session
) {
44 if (cmsSessions
.containsKey(session
)) {
45 CmsSession cmsSession
= cmsSessions
.get(session
);
46 cmsSession
.releaseDataSession(alias
, session
);
48 log
.warn("No CMS session for JCR session " + session
);