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