JBoss4.2.2GAでSeasar2を動かしてみる

判ってる人が誰も居ない場に放り込まれ、諸々の与件のみ伝えられたまま放置。もう右も左もなんとやらで・・・とめげていたら、こんな神資料を発見。

http://www.slideshare.net/bose999/jboss-application-server-seasar2-on-seasar-conference-2009-white

最新のS2であればJavaEEサーバごとのjta.diconが用意されてるので、それに置き替えてやればよいのだな。よし判った。bose999さん有難うございます!

感謝感激しつつ、4.2.2GAでもそうそうやる事変わるまいなんて作業。以下詳細は上記URLを御参照下さい。

と手順通りにやったところで、動かない。TransactionSynchronizationRegistry がありませんエラーが出てしまう。前にもTomcat環境で同じ事が起きて、geronimo-jta_1.0_spec-1.0.jar を geronimo-jta_1.1_spec-1.0.jar に変えて動くようになったんだったなあ、などと思い出しつつ。

TransactionSynchronizationRegistry インタフェースは JTA1.1 から追加されたのですね。ふむ。

そうなのだ、JBoss4.2.2はJavaEE5完全準拠ではないのであった、とjboss-j2ee.jar の中身を調べてみたら確かにJTA1.0の内容で、なんとかしないと。

どうやらS2Container の配布zipの中に、JTA1.0 と 1.1 の差分だけ入っているという、geronimo-jta_1.1_spec-1.0-tsr.jar なるものが入ってるとの事で、調べると要するに上記インタフェースが入ってるだけのjarで、これを JBOSS_SERVER_CONFIG/lib に入れてみた。

クラスが見つかりませんエラーはでなくなったけど、今度は JNDI で java:comp/TransactionSynchronizationRegistry が lookup できません。

jar 置いただけで JNDI に登録してませんので当然ですね。

S2のドキュメントでは、JBoss4.2以降であれば、jta.dicon の代わりに jta-jboss42.dicon を使えばよいとの記述があるのですが、その中で TransactionSynchronizationRegistry を JNDI lookup してるみたいですね。と思って確認したらその通りでした。

<!-- TransactionSynchronizationRegistry from JNDI -->
<component name="TransactionSynchronizationRegistry"
        class="javax.transaction.TransactionSynchronizationRegistry">
    @org.seasar.extension.j2ee.JndiResourceLocator@lookup("java:comp/TransactionSynchronizationRegistry")
</component>

なので、4.2より前のバージョン用の jta-jboss.dicon を使う事にします。こちらは同じ個所はこうなってます。

<!-- TransactionManager を利用する TransactionSynchronizationRegistry -->
<component name="TransactionSynchronizationRegistry"
    class="org.seasar.extension.jta.TransactionSynchronizationRegistryImpl"/>

jta-jboss42.dicon との差分を見ると、この部分の違いだけですので問題ないでしょう。

という訳で、s2container.dicon はこう書き直して

<component class="org.seasar.framework.container.factory.SimplePathResolver" >
    <initMethod name="addRealPath" >
        <arg>"jta.dicon"</arg>
        <arg>"jta-jboss.dicon"</arg>
    </initMethod>
</component>

無事動きました。cubbyが動いたばんざーい。

てなことを先々週にやってました・・・・あれからなーんにも進んでません・・・。

書き忘れましたが、S2のバージョンは 2.4.38 です。