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有効化したらふつーに動いた。