Chaining Apache CXF, JackRabbit using SpringModules
Apache CXF integration with Spring and SpringModules support for Apache JackRabbit provides a nice combination for chaining command of actions to be delegated across layers of the enterprise application tiers . Here is a quick tip as how to do this. A more detailed tutorial has been hosted at http://bit.ly/TmmJx
1) Web application configuration (/WEB-INF/web.xml) snippet (as specified below) loads Apache CXF configuration (classpath:cxf.xml) and delegates to CXF container
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:cxf.xml</param-value>
</context-param>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
2) Apache CXF’s configuration (cxf.xml) loads the Spring context configuration
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<import resource="classpath:jcrcontext.xml"/>
where the SpringModules JCRContext configuration loads the JackRabbit’s RepositoryFactoryBean
<bean id="repository" class="org.springmodules.jcr.jackrabbit.RepositoryFactoryBean">
<property name="configuration" value="classpath:repository.xml"/>
<property name="homeDir" ref="./target/myrepository"/>
</bean>
<bean id="sessionFactory" class="org.springmodules.jcr.jackrabbit.JackrabbitSessionFactory">
<property name="repository" ref="repository" />
<property name="credentials" ref="simpleCredentials"/>
</bean>
<bean id="jcrTemplate" class="org.springmodules.jcr.JcrTemplate">
<property name="sessionFactory" ref="sessionFactory" />
<property name="allowCreate" value="true" />
</bean>
<bean id="simpleCredentials" class="javax.jcr.SimpleCredentials">
<constructor-arg index="0" value="bogus"/>
<constructor-arg index="1">
<bean factory-bean="password" factory-method="toCharArray"/>
</constructor-arg>
</bean>
<bean id="password" class="java.lang.String">
<constructor-arg index="0" value="pass"/>
</bean>
This chaining can be extended to any depth and a myriad range of implementation stacks could be acheived, if a container (Spring, Seam, Guice) offer support for seamless intra-container configuration and component resolution.
Tnelson said,
October 1, 2009 at 8:00 am
I usually don’t post on Blogs but ya forced me to, great info.. excellent! … I’ll add a backlink and bookmark your site.
Bill Bartmann said,
October 10, 2009 at 12:07 am
Hey, great blog…but I don’t understand how to add your site in my rss reader. Can you Help me, please
Shrihari Chakrapani said,
October 13, 2009 at 12:14 pm
You can access the blog feed through http://schakrap.wordpress.com/feed/