1 package org
.argeo
.server
.jackrabbit
.webdav
;
3 import java
.util
.Collections
;
4 import java
.util
.HashMap
;
7 import javax
.jcr
.LoginException
;
8 import javax
.jcr
.Repository
;
9 import javax
.jcr
.RepositoryException
;
10 import javax
.jcr
.Session
;
11 import javax
.servlet
.ServletException
;
12 import javax
.servlet
.http
.HttpServletRequest
;
13 import javax
.servlet
.http
.HttpSession
;
15 import org
.apache
.commons
.logging
.Log
;
16 import org
.apache
.commons
.logging
.LogFactory
;
17 import org
.apache
.jackrabbit
.server
.SessionProvider
;
19 public class CachingSessionProvider
implements SessionProvider
{
20 private static final String JCR_SESSIONS_ATTRIBUTE
= "jcrSessions";
22 private final static Log log
= LogFactory
23 .getLog(CachingSessionProvider
.class);
25 @SuppressWarnings("unchecked")
26 public Session
getSession(HttpServletRequest request
, Repository rep
,
27 String workspace
) throws LoginException
, ServletException
,
29 HttpSession httpSession
= request
.getSession();
31 if (httpSession
.getAttribute(JCR_SESSIONS_ATTRIBUTE
) == null) {
33 .setAttribute(JCR_SESSIONS_ATTRIBUTE
, Collections
34 .synchronizedMap(new HashMap
<String
, Session
>()));
36 Map
<String
, Session
> sessions
= (Map
<String
, Session
>) httpSession
37 .getAttribute(JCR_SESSIONS_ATTRIBUTE
);
38 if (!sessions
.containsKey(workspace
)) {
39 Session session
= rep
.login(workspace
);
40 sessions
.put(workspace
, session
);
43 Session session
= sessions
.get(workspace
);
44 if (!session
.isLive()) {
45 session
= rep
.login(workspace
);
51 public void releaseSession(Session session
) {
52 if (log
.isDebugEnabled())
53 log
.debug("Releasing JCR session " + session
);