Yes yet another “hey I just found this out, so you need to know it too”. And by the way, if you do find this useful, I would really like you to comment on this post so that other people will find it too.
I need to set up Jetty 8 to use a JTA provider. Quick googling around suggested that I need to take into account the following:
- Setting up JNDI resources on Jetty: http://docs.codehaus.org/display/JETTY/JNDI
- Finding a JTA provider: http://stackoverflow.com/questions/777636/what-is-a-good-open-source-j2se-jta-transactionmanager-implementation
- Using Atomikos in Jetty: http://docs.codehaus.org/display/JETTY/Atomikos
The kicker being of course that those documentation resources are out of date. Pause here for a quick rant: please, so that you do not go to a special hell reserved for people who cause huge numbers of lives to be wasted, if you are releasing code and documentation into the wild: update the frakking documentation!. Sadly, most google searches for anything about Jetty go to those elderly Codehaus pages, rather than the more up-to-date but obscure pages at http://wiki.eclipse.org/Jetty
In order to get the combination of Jetty 8.x and Atomikos 3.8.x and JNDI working, you need to look in the right place, and put the right class path in your Jetty JNDI definition:
<New id="tx" class="org.eclipse.jetty.plus.jndi.Transaction">
<Arg>
<New class="com.atomikos.icatch.jta.UserTransactionImp"/>
</Arg>
</New>
and to copy the following from the Atomikos lib/ directory into the Jetty lib/ext/ directory:
geronimo-j2ee-connector_1.5_spec.jar
geronimo-jms_1.1_spec.jar
geronimo-jta_1.0.1B_spec.jar
and finally to copy all the JARs from the Atomikos dist/ directory into the Jetty lib/ext/ directory.
Note that I have not yet tested this exhaustively, and suspect that not all of these JARs are needed.