Simplify remoting configuration
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Nov 2012 14:41:03 +0000 (14:41 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Nov 2012 14:41:03 +0000 (14:41 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@5746 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

demo/log4j.properties
server/modules/org.argeo.jackrabbit.webapp/WEB-INF/applicationContext.xml
server/modules/org.argeo.jackrabbit.webapp/WEB-INF/osgi.xml
server/modules/org.argeo.jackrabbit.webapp/WEB-INF/remoting-servlet.xml
server/modules/org.argeo.jackrabbit.webapp/WEB-INF/webdav-servlet.xml
server/runtime/org.argeo.server.jcr.mvc/src/main/java/org/argeo/jcr/mvc/MultipleRepositoryHandlerMapping.java

index 75b2a8bb7a502c75f69855b34e0a3b39f7af85be..5e05c02a05e8a18f691fab7e49df284924b6f445 100644 (file)
@@ -5,7 +5,7 @@ log4j.logger.org.argeo=DEBUG
 log4j.logger.org.argeo.jackrabbit.remote.ExtendedDispatcherServlet=WARN
 log4j.logger.org.argeo.server.webextender.TomcatDeployer=WARN
 
-log4j.logger.org.springframework.security=DEBUG
+#log4j.logger.org.springframework.security=DEBUG
 #log4j.logger.org.apache.commons.exec=DEBUG
 #log4j.logger.org.apache.jackrabbit.server.jcr=DEBUG
 
index f3335b8abb0805334f39c032752f54460ed98204..736ed8aebf8bca4e836c15ab2c29026c05e22f2b 100644 (file)
@@ -28,6 +28,6 @@
 <!--           destroy-method="destroy" class="org.argeo.jackrabbit.remote.OpenInViewSessionProvider"> -->
 <!--   </bean> -->
 
-       <bean id="repositoryRegister" class="org.argeo.jcr.DefaultRepositoryRegister" />
+<!--   <bean id="repositoryRegister" class="org.argeo.jcr.DefaultRepositoryRegister" /> -->
 
 </beans>
\ No newline at end of file
index 007ea4e3edc35200bd8658b3efd4966cec42360f..b4a3c48df6436f736d63462e6243d9900175fd91 100644 (file)
        <!-- <listener ref="repositoryRegister" bind-method="register" -->\r
        <!-- unbind-method="unregister" /> -->\r
        <!-- </set> -->\r
-       <list id="repositories" interface="javax.jcr.Repository"\r
-               cardinality="0..N">\r
-               <listener ref="repositoryRegister" bind-method="register"\r
-                       unbind-method="unregister" />\r
-       </list>\r
+       <!-- <list id="repositories" interface="javax.jcr.Repository" -->\r
+       <!-- cardinality="0..N"> -->\r
+       <!-- <listener ref="repositoryRegister" bind-method="register" -->\r
+       <!-- unbind-method="unregister" /> -->\r
+       <!-- </list> -->\r
+\r
+       <reference id="repositoryFactory" interface="javax.jcr.RepositoryFactory" />\r
 \r
        <reference id="authenticationManager"\r
                interface="org.springframework.security.AuthenticationManager" />\r
index e0a13f318697535bdd9b1657c9f25ba8bad0d9b6..f5cd4d6098b0e8d92e814e638a672439278cb9f6 100644 (file)
@@ -15,7 +15,7 @@
 
        <bean id="urlMapping"
                class="org.argeo.jackrabbit.remote.JcrRemotingHandlerMapping">
-               <property name="repositoryRegister" ref="repositoryRegister" />
+               <property name="repositoryFactory" ref="repositoryFactory" />
                <property name="sessionProvider" ref="scopedSessionProvider" />
        </bean>
 
index 14b6dd1d57f85c532d269e91551407196a311eb6..50a3d5cea9765f8c0d2e3ce7348f755dec47ad0e 100644 (file)
@@ -14,7 +14,7 @@
 
        <bean id="urlMapping" class="org.argeo.jackrabbit.remote.SimpleWebdavHandlerMapping">
                <property name="configuration" value="/WEB-INF/webdav-config.xml" />
-               <property name="repositoryRegister" ref="repositoryRegister" />
+               <property name="repositoryFactory" ref="repositoryFactory" />
                <property name="sessionProvider" ref="scopedSessionProvider" />
        </bean>
 
index 917ad94f718981b972bd5692a701ab1f62df83f3..5c6e258e1b80b3f2d70245fa6caa00e52f335096 100644 (file)
 package org.argeo.jcr.mvc;
 
 import java.util.Enumeration;
-import java.util.List;
 import java.util.Properties;
 
 import javax.jcr.Repository;
+import javax.jcr.RepositoryFactory;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
@@ -28,10 +28,8 @@ import javax.servlet.http.HttpServletRequest;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.argeo.ArgeoException;
 import org.argeo.jcr.ArgeoJcrConstants;
-import org.argeo.jcr.JcrUtils;
-import org.argeo.jcr.RepositoryRegister;
+import org.argeo.jcr.ArgeoJcrUtils;
 import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
@@ -46,12 +44,13 @@ public abstract class MultipleRepositoryHandlerMapping implements
        private final static Log log = LogFactory
                        .getLog(MultipleRepositoryHandlerMapping.class);
 
-       private final static String MKCOL = "MKCOL";
+       // private final static String MKCOL = "MKCOL";
 
        private ConfigurableApplicationContext applicationContext;
        private ServletContext servletContext;
 
-       private RepositoryRegister repositoryRegister;
+       // private RepositoryRegister repositoryRegister;
+       private RepositoryFactory repositoryFactory;
 
        /** Actually creates the servlet to be registered. */
        protected abstract HttpServlet createServlet(Repository repository,
@@ -68,25 +67,32 @@ public abstract class MultipleRepositoryHandlerMapping implements
                String pathInfo = request.getPathInfo();
 
                // tokenize path
-               List<String> tokens = JcrUtils.tokenize(pathInfo);
+               // List<String> tokens = JcrUtils.tokenize(pathInfo);
+               // String[] tokens = extractPrefix(pathInfo);
 
                // check if repository can be found
-               if (tokens.size() == 0
-                               || (tokens.size() == 1 && tokens.get(0).equals("")))
-                       return null;
+               // if (tokens[0] == null || (tokens[1] == null && tokens[0].equals("")))
+               // return null;
+
                // MKCOL on repository or root node doesn't make sense
-               if ((tokens.size() == 1 || tokens.size() == 2)
-                               && request.getMethod().equals(MKCOL))
+               // if ((tokens.size() == 1 || tokens.size() == 2)
+               // && request.getMethod().equals(MKCOL))
+               // return null;
+
+               // String repositoryAlias = extractRepositoryName(tokens);
+               String repositoryAlias = extractRepositoryAlias(pathInfo);
+               if (repositoryAlias.equals(""))
                        return null;
-               String repositoryAlias = extractRepositoryName(tokens);
                request.setAttribute(ArgeoJcrConstants.JCR_REPOSITORY_ALIAS,
                                repositoryAlias);
                String pathPrefix = request.getServletPath() + '/' + repositoryAlias;
                String beanName = pathPrefix;
 
                if (!applicationContext.containsBean(beanName)) {
-                       Repository repository = repositoryRegister.getRepositories().get(
-                                       repositoryAlias);
+                       Repository repository = ArgeoJcrUtils.getRepositoryByAlias(
+                                       repositoryFactory, repositoryAlias);
+                       // Repository repository = repositoryRegister.getRepositories().get(
+                       // repositoryAlias);
                        HttpServlet servlet = createServlet(repository, pathPrefix);
                        applicationContext.getBeanFactory().registerSingleton(beanName,
                                        servlet);
@@ -98,20 +104,43 @@ public abstract class MultipleRepositoryHandlerMapping implements
                return hec;
        }
 
-       /** The repository name is the first part of the path info */
-       protected String extractRepositoryName(List<String> pathTokens) {
-               StringBuffer currName = new StringBuffer("");
-               for (String token : pathTokens) {
-                       currName.append(token);
-                       if (repositoryRegister.getRepositories().containsKey(
-                                       currName.toString()))
-                               return currName.toString();
-                       currName.append('/');
+       /** Returns the first two token of the path */
+       // protected String[] extractPrefix(String pathInfo) {
+       // String[] res = new String[2];
+       // StringTokenizer st = new StringTokenizer(pathInfo, "/");
+       // if (st.hasMoreTokens())
+       // res[0] = st.nextToken();
+       // if (st.hasMoreTokens())
+       // res[1] = st.nextToken();
+       // return res;
+       // }
+
+       /** Returns the first token of the path */
+       protected String extractRepositoryAlias(String pathInfo) {
+               StringBuffer buf = new StringBuffer();
+               for (int i = 1; i < pathInfo.length(); i++) {
+                       char c = pathInfo.charAt(i);
+                       if (c == '/')
+                               break;
+                       buf.append(c);
                }
-               throw new ArgeoException("No repository can be found for request "
-                               + pathTokens);
+               return buf.toString();
        }
 
+       /** The repository name is the first part of the path info */
+       // protected String extractRepositoryName(List<String> pathTokens) {
+       // StringBuffer currName = new StringBuffer("");
+       // for (String token : pathTokens) {
+       // currName.append(token);
+       // if (repositoryRegister.getRepositories().containsKey(
+       // currName.toString()))
+       // return currName.toString();
+       // currName.append('/');
+       // }
+       // throw new ArgeoException("No repository can be found for request "
+       // + pathTokens);
+       // }
+
        public void setApplicationContext(ApplicationContext applicationContext)
                        throws BeansException {
                this.applicationContext = (ConfigurableApplicationContext) applicationContext;
@@ -121,8 +150,13 @@ public abstract class MultipleRepositoryHandlerMapping implements
                this.servletContext = servletContext;
        }
 
-       public void setRepositoryRegister(RepositoryRegister repositoryRegister) {
-               this.repositoryRegister = repositoryRegister;
+       // public void setRepositoryRegister(RepositoryRegister repositoryRegister)
+       // {
+       // this.repositoryRegister = repositoryRegister;
+       // }
+
+       public void setRepositoryFactory(RepositoryFactory repositoryFactory) {
+               this.repositoryFactory = repositoryFactory;
        }
 
        protected class DelegatingServletConfig implements ServletConfig {