●JPAにおけるトランザクション実装
EJBにして、@TransactionAttributeアノテーションを使うのがよさげ。
public void insert(CreditCard e) throws Exception {
UserTransaction utx = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
utx.begin();
em.persist(e);
utx.commit();
}
JNDI(InititalContext)やJTA(UserTransaction)がやたらExceptionを投げてくるのでどのレイヤで吸収させるべきかの検討が必要であった。
@Named
@SessionScoped
@Stateful
public class Ejb implements Serializable {
...
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void insert(CreditCard e) {
em.persist(e);
}
}
例外キャッチ不要。トランザクションの開始終了の宣言不要。
これは楽!
ちなみに@RequestScopedにするなら、@Statelessのほうがおそらくよい。
参考
http://stackoverflow.com/questions/4294680/transaction-not-created-automatically-even-if-transactionattributetransactiona
http://otndnld.oracle.co.jp/document/products/wlw/docs103/guide/controls/conControlTransactions.html
●今後(短期課題)
(1)一覧画面のページング処理実装
(2)環境をRaspberry Piに移行する。
0 件のコメント:
コメントを投稿