Java EE 6のプロジェクトを作ろうとして自分のjava-examplesリポジトリを見直してみたら結構な量のJava EE 5のプロジェクトとJBoss AS 7のプロジェクトが転がっていて、こいつらもうほとんど使わないだろうなーと思ったのでoldに移した。消しても履歴から見られるけど、古いのを参照する機会もそこそこあるだろうからとりあえず移動で。
さて、本題。Java EE 6のJPAサンプル書いた。いつも通りミニマリスト精神で作ったファイルはpom.xml, Cat.java, CatTest.java, persistence.xmlの4つのみ。
このサンプルではEJBなどを利用していないので、テストクラスの中で@Inject UserTransactionをしてトランザクションを自分で操作している。もちろんEJBなどを挟めばこれは必要なくなる。
EntityManager.getTransaction().begin()などはJTA環境では利用できないので、トランザクションはUserTransaction経由で操作する必要がある。
最初@PersistenceContext EntityManagerだけ定義して試しに動かしたときにnullになっててがInjectionされてないのなんでだろーと思ったけど、ArquillianのテストクラスのInjectionはCDI有効化しないと@Inject以外も動かないことをすっかり忘れていた。どっちにしろUserTransactionも必要だったのCDI有効化したらふつーに動いた。