Jackrabbit
From Resin 3.0
Step by Step (JCA)
[Tested with Resin 3.1.5 and Jackrabbit 1.4]
The JCA deployment style of Jackrabbit integrates Jackrabbit sessions with any Resin transactions, including transactions started by EJBs or UserTransaction
. The webapp style of Jackrabbit deployment will work with Resin, but will not automatically be transaction-enabled.
- Download Resin from http://caucho.com/download
- Unzip Resin into /usr/local/share/resin
- Download the JCR API from http://www.day.com/maven/jsr170/jars/jcr-1.0.jar
- Put the JCR .jar in resin/ext-lib (it will be shared for all web-apps)
- Download the jackrabbit .rar file from http://jackrabbit.apache.org/downloads.cgi
- Put the jackrabbit .rar in resin/deploy
- Make sure resin-support.jar is in resin/ext-webapp-lib (to enable the uri="jackrabbit:" syntax below)
- Create a webapp in resin/webapps/jackrabbit
- Create or copy a repository.xml to WEB-INF/repository.xml (look inside the .rar for a sample)
- Create a resin/webapps/jackrabbit/WEB-INF/resin-web.xml to configure the Jackrabbit session factory:
<web-app xmlns="http://caucho.com/ns/resin"> <resource-adapter uri="jackrabbit:"/> <connection-factory uri="jackrabbit:" name="jcr/test"> <init> <home-dir>${webApp.root}/WEB-INF/repository</home-dir> <config-file>${webApp.root}/WEB-INF/repository.xml</config-file> </init> </connection-factory> <servlet-mapping url-pattern="demo" servlet-class="demo.FirstHopServlet"/> </web-app>
Note: you can specify the driver classnames directly (and skip the uri="...") with
<resource-adapter class="org.apache.jackrabbit.jca.JCAResourceAdapter"/> <connection-factory class="org.apache.jackrabbit.jca.JCAManagedConnectionFactory">
- Create a demo servlet to test JCA in WEB-INF/classes/demo/FirstHopServlet.java (Resin will compile the servlet for you):
package demo; import java.io.*; import javax.servlet.*; import javax.jcr.*; import javax.webbeans.*; public class FirstHopServlet extends GenericServlet { @In private Repository _repository; public void service(ServletRequest req, ServletResponse res) throws IOException, ServletException { PrintWriter out = res.getWriter(); try { testJackrabbit(out); } catch (Exception e) { throw new ServletException(e); } } public void testJackrabbit(PrintWriter out) throws Exception { Session session = _repository.login(); try { String user = session.getUserID(); String name = _repository.getDescriptor(Repository.REP_NAME_DESC); out.println("Logged in " + user + " to " + name + " repository"); } finally { session.logout(); } } }
- Start Resin with java -jar resin/lib/resin.jar
- Browse http://localhost:8080/jackrabbit