2014年5月9日金曜日

KakeiWeb開発日記(2)

プログラミングスキル維持のため、家計簿システム(KakeiWeb)を作ろうという試み。

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

コメントを投稿