このままJPAとの連携のお話を書こうと思ったら
意外にてこずった。
いわゆるJavaSEで動作をさせるリソースローカルはさくさく何も問題なく動く。
でも、glassfishV2はJavaEE5対応アプリケーションサーバーだ。デプロイ時にEntityManagerがインジェクトされるクラスやpersistence.xmlを自動で判断、そしてリソースローカルだとわかると処理がとまってしまう。
実行までたどり着かないのだ。
そもそも、NetBeans6.0はTomcatを選択していてもJTAモードで生成されてしまう。そしてJTAモードだと共有EntityManagerが上手く動かないようだ。トランザクションやJPAの機能はごっそりとアプリケーションサーバーの中で処理される。Spring側からは上手く認識されないことも多かった。
結局昔からあるJpaTemplateを使うとあっさりと動く。JPAのコードというよりはSpring依存コードになるし、トランザクションを自動でやってくれるとはいえ自前でEntityManagerFactoryからEntityManagerを取得しているようなもののため、あまり効率はよくない。
自動でインジェクトさせるためにはちょっといじらないといけないし、面倒すぎるかも。少なくとも手軽さはない。
というところまでたどり着くのに10時間以上かかっちまった・・・。
やっぱりシングルスレッドアクセスが保障されるEJB3のDIの手軽さはJSFやJPAとの組み合わせにおいて異常だな。JBOSSだと日本語はしっかりとおるんだろうか・・・。