JPAベースのJavaアプリケーションにトランザクションロールバックサポートをレトロフィットし、ロールバック(http://weblogs.java.net/blog/davidvc/archive/2007/04/jpa_and_rollbac.html)およびロールバックに接続されたJPAのキンクを処理するEcmel Ercansのアプローチを使用しています。ロールバックを使用した再利用可能なJPAトランザクションメソッドのヘルプ
EntityManager em = emf.createEntityManager();
EntityTransaction tx = null;
try {
tx = em.getTransaction();
tx.begin();
...
...
tx.commit();
} catch(Exception ex) {
if(tx != null && tx.isActive()) tx.rollback();
} finally {
em.close();
}
私はこれに関する2つの質問があります。まず、このソリューションが登場するスレッドは2歳です。管理エンティティとロールバックに問題がありますか?
問題が解決しない場合は、解決策が少し大きくなり、実際に何が行われているのかがわかりにくいという問題があります。私はそれをジェネリックメソッドにして、私が欲しいJPAアクションを呼び出してプラグインできるようにしたいと思います。私はジェネリックメソッドがJPAトランザクション内で行うべきコマンドのメソッドを持つ匿名クラスのインスタンスを取るべきであるという考えで、しばらくそれを試してきました。
しかし、私が匿名のクラスで試した解決策は、最初の問題とほぼ同じくらい煩雑になります。これは主に、トランザクションメソッドの呼び出しの前でも後でも、通常は3つすべての匿名クラス内で、私が扱うすべてのエンティティにアクセスする必要があるためです。さらに、データを無名クラスに移動させるオーバーヘッドが増えました。これは、コードの中で「遠く」実行されると無駄に感じます。
クリーナーソリューションの提案はありますか?