●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 件のコメント:
コメントを投稿