Improve JCR remote
authorMathieu Baudier <mbaudier@argeo.org>
Fri, 25 Feb 2011 10:30:48 +0000 (10:30 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Fri, 25 Feb 2011 10:30:48 +0000 (10:30 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@4201 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

eclipse/plugins/org.argeo.jcr.ui.explorer/log4j.properties
eclipse/plugins/org.argeo.jcr.ui.explorer/org.argeo.jcr.ui.explorer.product
eclipse/plugins/org.argeo.jcr.ui.explorer/pom.xml
server/modules/org.argeo.jackrabbit.webapp/META-INF/MANIFEST.MF
server/modules/org.argeo.jackrabbit.webapp/WEB-INF/applicationContext.xml
server/modules/org.argeo.jackrabbit.webapp/WEB-INF/jcr-manager-servlet.xml [new file with mode: 0644]
server/modules/org.argeo.jackrabbit.webapp/WEB-INF/remoting-servlet.xml
server/modules/org.argeo.jackrabbit.webapp/WEB-INF/web.xml
server/modules/org.argeo.jackrabbit.webapp/WEB-INF/webdav-config.xml [new file with mode: 0644]
server/modules/org.argeo.jackrabbit.webapp/WEB-INF/webdav-servlet.xml [new file with mode: 0644]
server/modules/org.argeo.jackrabbit.webapp/WEB-INF/xmlremoting-servlet.xml [new file with mode: 0644]

index 8a89a4aa3b7c8c24b8499ae72b7687e7bbc13762..577571c820a838b372116b5f3820c18d6dcb585c 100644 (file)
@@ -2,7 +2,7 @@ log4j.rootLogger=WARN, console
 
 ## Levels
 log4j.logger.org.argeo=DEBUG
-log4j.logger.org.springframework.security=DEBUG
+log4j.logger.org.springframework.security=INFO
 
 log4j.logger.org.apache.catalina=INFO
 log4j.logger.org.apache.coyote=INFO
index 35b11a864b29936beb612059c534a6a8497753f0..0980e1d7ebdd08638578e04523a4a715e5d26436 100644 (file)
@@ -7,7 +7,8 @@
    </configIni>
 
    <launcherArgs>
-      <vmArgs>-Dlog4j.configuration=file:${system_property:user.home}/dev/src/commons/eclipse/plugins/org.argeo.jcr.ui.explorer/log4j.properties</vmArgs>
+      <programArgs>-console</programArgs>
+      <vmArgs>-Dlog4j.configuration=file:${system_property:user.home}/dev/src/commons/eclipse/plugins/org.argeo.jcr.ui.explorer/log4j.properties -Dorg.argeo.security.ui.initialPerspective=org.argeo.jcr.ui.explorer.perspective</vmArgs>
       <vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts</vmArgsMac>
    </launcherArgs>
 
       <plugin id="org.argeo.server.core"/>
       <plugin id="org.argeo.server.jackrabbit"/>
       <plugin id="org.argeo.server.jcr"/>
+      <plugin id="org.argeo.server.jcr.mvc"/>
       <plugin id="org.argeo.server.json"/>
       <plugin id="org.argeo.server.tika.jackrabbit" fragment="true"/>
       <plugin id="org.argeo.server.tomcat" fragment="true"/>
index 5f08cd51133f6a8b16c1ffa804245d8f0fc47215..89c51dd8e85cff13460a27b1f844e78c8c862c90 100644 (file)
                        <version>${version.argeo-commons}</version>
                        <scope>test</scope>
                </dependency>
+               <dependency>
+                       <groupId>org.argeo.commons.server</groupId>
+                       <artifactId>org.argeo.server.jcr.mvc</artifactId>
+                       <version>${version.argeo-commons}</version>
+                       <scope>test</scope>
+               </dependency>
                <dependency>
                        <groupId>org.argeo.commons.server</groupId>
                        <artifactId>org.argeo.server.dep.jackrabbit.server</artifactId>
index 2122086ea33937b9c044efb4434fd926ba5aa7e4..f0bbbee0a9314ef7845ff46d6a9edce5d88a3808 100644 (file)
@@ -11,9 +11,14 @@ Import-Package: javax.jcr,
  javax.servlet.resources,
  org.argeo.jackrabbit.remote,
  org.argeo.jcr,
+ org.argeo.jcr.mvc,
+ org.argeo.server.json,
+ org.argeo.server.mvc,
  org.springframework.osgi.web.context.support;version="1.2.1",
  org.springframework.security;version="2.0.6.RELEASE",
  org.springframework.security.ui.webapp;version="2.0.6.RELEASE",
  org.springframework.web.context;version="2.5.6.SEC01",
  org.springframework.web.filter;version="2.5.6.SEC01",
- org.springframework.web.servlet.handler;version="2.5.6.SEC01"
+ org.springframework.web.servlet;version="2.5.6.SEC01",
+ org.springframework.web.servlet.handler;version="2.5.6.SEC01",
+ org.springframework.web.servlet.view;version="2.5.6.SEC01"
index 1aec32ee6c5ff41a4677d4dcf633adb57ad2ca1a..a30ecbf0613e087d222588c4722b5c5c94761cb9 100644 (file)
@@ -12,4 +12,9 @@
 
        <bean id="repositoryRegister" class="org.argeo.jcr.DefaultRepositoryRegister" />
 
+       <bean id="osivInterceptor"
+               class="org.argeo.jcr.mvc.OpenSessionInViewJcrInterceptor">
+<!--           <property name="session" ref="jcrSession" />-->
+       </bean>
+
 </beans>
\ No newline at end of file
diff --git a/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/jcr-manager-servlet.xml b/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/jcr-manager-servlet.xml
new file mode 100644 (file)
index 0000000..78670a6
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
+       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
+       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
+
+       <context:component-scan base-package="org.argeo.jcr.mvc" />
+
+       <bean name="**" class="org.argeo.jcr.mvc.JcrManagerController">
+       </bean>
+
+       <bean id="viewResolver" class="org.argeo.server.mvc.SerializingViewResolver">
+               <property name="serializer" ref="serverMapper" />
+       </bean>
+
+       <bean id="serverMapper" class="org.argeo.server.json.JsonServerMapper">
+       </bean>
+
+       <bean class="org.argeo.server.mvc.DefaultHandlerExceptionResolver" />
+
+       <bean id="handlerMapping"
+               class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
+               <property name="interceptors">
+                       <list>
+                               <ref bean="osivInterceptor" />
+                       </list>
+               </property>
+       </bean>
+
+</beans>
\ No newline at end of file
index c77def2519b48f2658455480be519789ee806aca..35376c18403e521fbc0e58cad328ea5cf6ab3d7c 100644 (file)
@@ -14,7 +14,7 @@
                class="org.springframework.web.servlet.handler.SimpleServletHandlerAdapter" />
 
        <bean id="urlMapping"
-               class="org.argeo.server.jackrabbit.webdav.MultipleRepositoryHandlerMapping">
+               class="org.argeo.jackrabbit.remote.JcrRemotingHandlerMapping">
                <property name="repositoryRegister" ref="repositoryRegister" />
        </bean>
 
index 68ba7592b58a00de9bf9b88a7a37dc33fd01c946..f3901fe4c5ccb6d772a1f37e8d5713e910bba79c 100644 (file)
                <url-pattern>/remoting/*</url-pattern>
        </servlet-mapping>
 
+       <!-- XML rmeoting -->
+       <servlet>
+               <servlet-name>xmlremoting</servlet-name>
+               <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+               <init-param>
+                       <param-name>contextClass</param-name>
+                       <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value>
+               </init-param>
+               <load-on-startup>1</load-on-startup>
+       </servlet>
+       <servlet-mapping>
+               <servlet-name>xmlremoting</servlet-name>
+               <url-pattern>*.jcr</url-pattern>
+       </servlet-mapping>
+
+       <!-- WEBDAV servlet -->
+       <servlet>
+               <servlet-name>webdav</servlet-name>
+               <servlet-class>org.argeo.jackrabbit.remote.ExtendedDispatcherServlet</servlet-class>
+               <init-param>
+                       <param-name>contextClass</param-name>
+                       <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value>
+               </init-param>
+               <init-param>
+                       <param-name>dispatchOptionsRequest</param-name>
+                       <param-value>true</param-value>
+               </init-param>
+               <load-on-startup>1</load-on-startup>
+       </servlet>
+
+       <servlet-mapping>
+               <servlet-name>webdav</servlet-name>
+               <url-pattern>/default/*</url-pattern>
+       </servlet-mapping>
+
+       <!-- JCR-MANAGER servlet -->
+       <servlet>
+               <servlet-name>jcr-manager</servlet-name>
+               <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+               <init-param>
+                       <param-name>contextClass</param-name>
+                       <param-value>org.springframework.osgi.web.context.support.OsgiBundleXmlWebApplicationContext</param-value>
+               </init-param>
+               <load-on-startup>1</load-on-startup>
+       </servlet>
+
+       <servlet-mapping>
+               <servlet-name>jcr-manager</servlet-name>
+               <url-pattern>/jcr-manager/*</url-pattern>
+       </servlet-mapping>
+
+
        <!--  Security -->
-<!--   <filter>-->
-<!--           <filter-name>springSecurityFilterChain</filter-name>-->
-<!--           <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>-->
-<!--   </filter>-->
-<!---->
-<!--   <filter-mapping>-->
-<!--           <filter-name>springSecurityFilterChain</filter-name>-->
-<!--           <url-pattern>/*</url-pattern>-->
-<!--   </filter-mapping>-->
+       <filter>
+               <filter-name>springSecurityFilterChain</filter-name>
+               <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
+       </filter>
+
+       <filter-mapping>
+               <filter-name>springSecurityFilterChain</filter-name>
+               <url-pattern>/*</url-pattern>
+       </filter-mapping>
 </web-app>
diff --git a/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/webdav-config.xml b/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/webdav-config.xml
new file mode 100644 (file)
index 0000000..f562d76
--- /dev/null
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+  -->
+<!--
+<!DOCTYPE config [
+        <!ELEMENT config (iomanager , propertymanager, (collection | noncollection)? , filter?, mimetypeproperties?) >
+
+        <!ELEMENT iomanager (class, iohandler*) >
+        <!ELEMENT iohandler (class) >
+
+        <!ELEMENT propertymanager (class, propertyhandler*) >
+        <!ELEMENT propertyhandler (class) >
+
+        <!ELEMENT collection (nodetypes) >
+        <!ELEMENT noncollection (nodetypes) >
+
+        <!ELEMENT filter (class, namespaces?, nodetypes?) >
+
+        <!ELEMENT class >
+        <!ATTLIST class
+            name  CDATA #REQUIRED
+        >
+        <!ELEMENT namespaces (prefix | uri)* >
+        <!ELEMENT prefix (CDATA) >
+        <!ELEMENT uri (CDATA) >
+
+        <!ELEMENT nodetypes (nodetype)* >
+        <!ELEMENT nodetype (CDATA) >
+
+        <!ELEMENT mimetypeproperties (mimemapping*, defaultmimetype) >
+
+        <!ELEMENT mimemapping >
+        <!ATTLIST mimemapping
+            extension  CDATA #REQUIRED
+            mimetype  CDATA #REQUIRED
+        >
+
+        <!ELEMENT defaultmimetype (CDATA) >
+]>
+-->
+
+<config>
+    <!--
+     Defines the IOManager implementation that is responsible for passing
+     import/export request to the individual IO-handlers.
+    -->
+    <iomanager>
+        <!-- class element defines the manager to be used. The specified class
+             must implement the IOManager interface.
+             Note, that the handlers are being added and called in the order
+             they appear in the configuration.
+        -->
+        <class name="org.apache.jackrabbit.server.io.IOManagerImpl" />
+        <iohandler>
+            <class name="org.apache.jackrabbit.server.io.VersionHandler" />
+        </iohandler>
+        <iohandler>
+            <class name="org.apache.jackrabbit.server.io.VersionHistoryHandler" />
+        </iohandler>
+        <iohandler>
+            <class name="org.apache.jackrabbit.server.io.ZipHandler" />
+        </iohandler>
+        <iohandler>
+            <class name="org.apache.jackrabbit.server.io.XmlHandler" />
+        </iohandler>
+        <iohandler>
+            <class name="org.apache.jackrabbit.server.io.DirListingExportHandler" />
+        </iohandler>
+        <iohandler>
+            <class name="org.apache.jackrabbit.server.io.DefaultHandler" />
+        </iohandler>
+    </iomanager>
+    <!--
+     Example config for iomanager that populates its list of handlers with
+     default values. Therefore the 'iohandler' elements are omited.
+    -->
+    <!--
+    <iomanager>
+        <class name="org.apache.jackrabbit.server.io.DefaultIOManager" />
+    </iomanager>
+    -->
+    <!--
+     Defines the PropertyManager implementation that is responsible for export
+     and import of resource properties.
+    -->
+    <propertymanager>
+        <!-- class element defines the manager to be used. The specified class
+             must implement the PropertyManager interface.
+             Note, that the handlers are being added and called in the order
+             they appear in the configuration.
+        -->
+        <class name="org.apache.jackrabbit.server.io.PropertyManagerImpl" />
+        <propertyhandler>
+            <class name="org.apache.jackrabbit.server.io.VersionHandler" />
+        </propertyhandler>
+        <propertyhandler>
+            <class name="org.apache.jackrabbit.server.io.VersionHistoryHandler" />
+        </propertyhandler>
+        <propertyhandler>
+            <class name="org.apache.jackrabbit.server.io.ZipHandler" />
+        </propertyhandler>
+        <propertyhandler>
+            <class name="org.apache.jackrabbit.server.io.XmlHandler" />
+        </propertyhandler>
+        <propertyhandler>
+            <class name="org.apache.jackrabbit.server.io.DefaultHandler" />
+        </propertyhandler>
+    </propertymanager>
+    <!--
+     Define nodetypes, that should never by displayed as 'collection'
+    -->
+    <noncollection>
+        <nodetypes>
+            <nodetype>nt:file</nodetype>
+            <nodetype>nt:resource</nodetype>
+        </nodetypes>
+    </noncollection>
+    <!--
+     Example: Defines nodetypes, that should always be displayed as 'collection'.
+    -->
+    <!--
+    <collection>
+        <nodetypes>
+            <nodetype>nt:folder</nodetype>
+            <nodetype>rep:root</nodetype>
+        </nodetypes>
+    </collection>
+    -->
+    <!--
+     Filter that allows to prevent certain items from being displayed.
+     Please note, that this has an effect on PROPFIND calls only and does not
+     provide limited access to those items matching any of the filters.
+
+     However specifying a filter may cause problems with PUT or MKCOL if the
+     resource to be created is being filtered out, thus resulting in inconsistent
+     responses (e.g. PUT followed by PROPFIND on parent).
+     -->
+    <filter>
+        <!-- class element defines the resource filter to be used. The specified class
+             must implement the ItemFilter interface -->
+        <class name="org.apache.jackrabbit.webdav.simple.DefaultItemFilter" />
+        <!--
+         Nodetype names to be used to filter child nodes.
+         A child node can be filtered if the declaring nodetype of its definition
+         is one of the nodetype names specified in the nodetypes Element.
+         E.g. defining 'rep:root' as filtered nodetype whould result in jcr:system
+         being hidden but no other child node of the root node, since those
+         are defined by the nodetype nt:unstructered.
+        -->
+        <!--
+        <nodetypes>
+            <nodetype>rep:root</nodetype>
+        </nodetypes>
+        -->
+        <!--
+         Namespace prefixes or uris. Items having a name that matches any of the
+         entries will be filtered.
+        -->
+        <namespaces>
+            <prefix>rep</prefix>
+            <prefix>jcr</prefix>
+            <!--
+            <uri>internal</uri>
+            <uri>http://www.jcp.org/jcr/1.0</uri>
+            -->
+        </namespaces>
+    </filter>
+    
+    <!--
+     Optional 'mimetypeproperties' element.
+     It defines additional or replaces existing mappings for the MimeResolver
+     instance created by the ResourceConfig.
+     The default mappings are defined in org.apache.jackrabbit.server.io.mimetypes.properties.
+     If the default mime type defined by MimeResolver is 'application/octet-stream'.
+    -->
+    <!--
+    <mimetypeproperties>
+        <mimemapping extension="rtf" mimetype="application/rtf" />
+        <mimemapping extension="ott" mimetype="application/vnd.oasis.opendocument.text-template" />
+        <defaultmimetype>text/html</defaultmimetype>
+    </mimetypeproperties>
+    -->
+</config>
diff --git a/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/webdav-servlet.xml b/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/webdav-servlet.xml
new file mode 100644 (file)
index 0000000..c3ede3f
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
+       xmlns:tx="http://www.springframework.org/schema/tx"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
+       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
+
+       <bean id="webdavServlet" class="org.argeo.jackrabbit.remote.WebDavServlet">
+<!--           <property name="repository" ref="jcrRepository" />-->
+               <property name="resourceConfiguration" value="osgibundle:/WEB-INF/webdav-config.xml" />
+       </bean>
+
+       <bean
+               class="org.springframework.web.servlet.handler.SimpleServletPostProcessor" />
+
+       <bean id="servletHandler"
+               class="org.springframework.web.servlet.handler.SimpleServletHandlerAdapter" />
+
+       <bean id="urlMapping"
+               class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
+               <property name="mappings">
+                       <props>
+                               <prop key="**">webdavServlet</prop>
+                       </props>
+               </property>
+       </bean>
+
+</beans>
\ No newline at end of file
diff --git a/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/xmlremoting-servlet.xml b/server/modules/org.argeo.jackrabbit.webapp/WEB-INF/xmlremoting-servlet.xml
new file mode 100644 (file)
index 0000000..61c8867
--- /dev/null
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="
+               http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
+               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
+               http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
+
+       <context:component-scan base-package="org.argeo.jcr.mvc" />
+
+       <bean name="/*.jcr" class="org.argeo.jcr.mvc.JcrBrowserController" />
+
+       <!-- Views -->
+       <bean name="getJcrItem" class="org.argeo.server.mvc.SerializingView">
+               <property name="serializer">
+                       <bean class="org.argeo.jcr.mvc.JcrXmlServerSerializer" />
+               </property>
+       </bean>
+
+       <bean name="queryJcrNodes" class="org.argeo.server.mvc.SerializingView">
+               <property name="serializer" ref="jsonSerializer" />
+       </bean>
+
+       <bean name="queryJcrTable" class="org.argeo.server.mvc.SerializingView">
+               <property name="serializer" ref="jsonSerializer" />
+       </bean>
+
+       <bean name="500" class="org.argeo.server.mvc.SerializingView">
+               <property name="serializer" ref="jsonSerializer" />
+       </bean>
+
+       <!-- Serializers -->
+       <bean id="jsonSerializer" class="org.argeo.server.json.JsonServerSerializer" />
+
+       <!-- MVC -->
+       <bean id="handlerMapping"
+               class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
+               <property name="interceptors">
+                       <list>
+                               <ref bean="osivInterceptor" />
+                       </list>
+               </property>
+       </bean>
+
+       <bean id="viewResolver"
+               class="org.springframework.web.servlet.view.BeanNameViewResolver" />
+
+       <bean class="org.argeo.server.mvc.DefaultHandlerExceptionResolver" />
+
+</beans>
\ No newline at end of file