Index: pom.xml =================================================================== --- pom.xml (revision 1236349) +++ pom.xml (working copy) @@ -71,7 +71,7 @@ - !* + org.apache.jackrabbit.server;version=1.0;provide:=true org.apache.jackrabbit.server.*, Index: src/main/java/org/apache/jackrabbit/server/remoting/davex/DavexServletService.java =================================================================== --- src/main/java/org/apache/jackrabbit/server/remoting/davex/DavexServletService.java (revision 1236349) +++ src/main/java/org/apache/jackrabbit/server/remoting/davex/DavexServletService.java (working copy) @@ -20,15 +20,23 @@ import java.util.Map; +import javax.jcr.LoginException; import javax.jcr.Repository; +import javax.jcr.RepositoryException; +import javax.jcr.Session; import javax.servlet.Servlet; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; import org.apache.felix.scr.annotations.Activate; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Properties; import org.apache.felix.scr.annotations.Property; import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.ReferenceCardinality; +import org.apache.felix.scr.annotations.ReferencePolicy; import org.apache.felix.scr.annotations.Service; +import org.apache.jackrabbit.server.SessionProvider; import org.apache.jackrabbit.webdav.server.AbstractWebdavServlet; import org.apache.jackrabbit.webdav.util.CSRFUtil; @@ -38,7 +46,8 @@ @Property(name = "service.description", value = "Apache Jackrabbit JcrRemoting Servlet"), @Property(name = JcrRemotingServlet.INIT_PARAM_AUTHENTICATE_HEADER, value = AbstractWebdavServlet.DEFAULT_AUTHENTICATE_HEADER), @Property(name = JcrRemotingServlet.INIT_PARAM_CSRF_PROTECTION, value = CSRFUtil.DISABLED), - @Property(name = JcrRemotingServlet.INIT_PARAM_MISSING_AUTH_MAPPING, value = "") }) + @Property(name = JcrRemotingServlet.INIT_PARAM_MISSING_AUTH_MAPPING, value = ""), + @Property(name = "contextId", value = "") }) public class DavexServletService extends JcrRemotingServlet { /** Serial version UID */ @@ -52,6 +61,9 @@ @Reference private Repository repository; + @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY, policy = ReferencePolicy.DYNAMIC) + SessionProvider sessionProvider; + private String alias; @Override @@ -78,4 +90,30 @@ } } + public SessionProvider getSessionProvider() { + return new SessionProvider() { + + private SessionProvider defaultSessionProvider; + + public Session getSession(HttpServletRequest request, Repository rep, String workspace) + throws LoginException, ServletException, RepositoryException { + return getSessionProvider().getSession(request, rep, workspace); + } + + public void releaseSession(Session session) { + getSessionProvider().releaseSession(session); + } + + private SessionProvider getSessionProvider() { + SessionProvider provider = DavexServletService.this.sessionProvider; + if (provider == null) { + if (this.defaultSessionProvider == null) { + this.defaultSessionProvider = DavexServletService.super.getSessionProvider(); + } + provider = this.defaultSessionProvider; + } + return provider; + } + }; + } }