On Jul 14, 2009, at 1:16 PM, Allan Lykke Christensen wrote:
Thanks for your response. I realised that I was trying to over-
engineer my code by having dynamic binding and look-up of objects
using JNDI. It was not needed for the purpose of my application.
Instead I've gone back to using a Resource Adapter for connecting to
a Java Content Repository (JCR). Specifically, I'm using the
Jackrabbit Content Repository. A JCA component was already provided
(although a pain to install on Mac because of filename case issues)
and I've managed to install it on GlassFish. This got me back to my
original test case. Using the Resource Adapter (JCA 1.0), requires
me to set-up a a Connector connection pool and resource which I
bound to a JNDI name. The repository would then be available using
the following DI:
@Resource(mappedName="jcr/repository",
type=javax.jcr.Repository.class) private Repository rep;
But how do I tell OpenEJB about the resource so that I can add my
own dummy repository before running my tests? Is it possible?
Sure, you can plug in any J2EE compliant Resource Adapter. The
process for doing that in a Maven test environment is as a described
an email or two back.
As described in that other email, Maven will not add rar files
(Resource Adapter aRchives) to the classpath for some very stubborn
reason, so you have to sort of unwrap it by creating a module with the
same dependencies as the rar file and with the ra.xml file from the
rar extracted to src/resources/META-INF/ra.xml. Fortunately
Jackrabbit uses maven and everything is up in maven repositories, so
the setup is much easier. This worked for me:
jackrabbit-rar
jackrabbit-rar/pom.xml
jackrabbit-rar/src
jackrabbit-rar/src/main
jackrabbit-rar/src/main/resources
jackrabbit-rar/src/main/resources/META-INF
jackrabbit-rar/src/main/resources/META-INF/ra.xml
--pom.xml-------------
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<groupId>your.package</groupId>
<artifactId>jackrabbit-rar</artifactId>
<version>1.0-SNAPSHOT</version>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<name>Jackrabbit Resource Adapter</name>
<dependencies>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-jca</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>javax.jcr</groupId>
<artifactId>jcr</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
----------------------
Adjust the <groupId> from "your.package" to whatever groupId you use
for your own modules. Change the jackrabbit version to whatever you
are using. Also remember the ra.xml file needs to be extracted from
the jackrabbit-jca.rar file.
Then you should add the "<module>jackrabbit-rar</module>" to your
parent pom. Anywhere that needs to use the Jackrabbit Resource
Adapter just needs to declare a maven dependency on it like so:
<dependency>
<groupId>your.package</groupId>
<artifactId>jackrabbit-rar</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</provided>
</dependency>
Once that is declared in your modules that use the Jackrabbit Resource
Adapter, all the injection points should work. You should see some
log lines like the following that indicate the Resource Adapter (aka
Connector) is being found and deployed:
INFO - Found ConnectorModule in classpath: /Users/dblevins/work/
openejb3/examples/ear-testing/jackrabbit-rar/target/jackrabbit-rar-1.0-
SNAPSHOT.jar
...
INFO - Beginning load: /Users/dblevins/work/openejb3/examples/ear-
testing/jackrabbit-rar/target/jackrabbit-rar-1.0-SNAPSHOT.jar
...
INFO - Configuring Service(id=jackrabbit-rar-1.0-SNAPSHOT.jarRA,
type=Resource, provider-id=jackrabbit-rar-1.0-SNAPSHOT.jarRA)
INFO - Configuring Service(id=jackrabbit-rar-1.0-SNAPSHOT.jar,
type=Resource, provider-id=jackrabbit-rar-1.0-SNAPSHOT.jar)
...
INFO - Enterprise application "classpath.ear" loaded.
I gave the above setup a try and it did deploy for me. I don't know
what it takes to configure and use Jackrabbit itself, but this will
get you past the Maven limitation and allow OpenEJB to see and deploy
the rar like it would any compliant Resource Adapter.
Hope this helps!
-David