私は Spring + Hibernate + MySQL Web アプリケーションを持っていますが、これは今のところ単なる hello-world-test-area です。
私の Service クラスの 1 つは、このメソッドを実装しています。
public List<Offerta> tutte() {
List<Offerta> tutte = null;
TransactionStatus status = txm.getTransaction( new DefaultTransactionDefinition() );
try {
tutte = dao.getAll(Offerta.class);
txm.commit(status);
} catch (Exception e) {
e.printStackTrace();
txm.rollback(status);
}
return tutte;
}
「txm」は、注入された PlatformTransactionManager です。
私が今欲しいのは、すべてのサービスのメソッドで「ラッピング」トランザクション コードが重複しないようにすることです!
私はこのようなものが欲しいです:
someHelperTransactionClass.doThisInTransaction(new TransactionAction() {
List l = dao.queryForSomething();
});
しかし、これは内部クラスです。どうすればデータを出し入れできますか? つまり、その TransactionAction から結果の "l" リストを取得するにはどうすればよいですか? この特定のケースにはさまざまな方法で答えることができますが、必要なのは、同じ退屈なコードを毎回書く必要がなく、実際のデータベース コードを記述できる汎用の TransactionAction または別のソリューションです。
「@Transactional アノテーションや AOP tx:advice 構成を使用しないのはなぜですか?」という質問には答えないでください。できないから!なんで?私は Google AppEngine を使用していますが、クールな人はそれほどクールではありません。javax.naming パッケージへのアクセスが無効になっていること、および宣言型トランザクションへの優れた方法で何かが影響しています。:-\