のは、(私はDAOとしてiBatisのを使用しています)私は私のプロジェクトで、次のような構造を持っているとしましょう:iBatisにネストされたトランザクションの問題を解決するには?
public class UsersManager {
public void do {
mySqlMapClient.startTransaction();
// my code here
mySqlMapClient.endTransaction();
mySqlMapClient.commitTransaction();
}
}
public class StatsManager {
public void do {
mySqlMapClient.startTransaction();
// my code here
mySqlMapClient.endTransaction();
mySqlMapClient.commitTransaction();
}
}
public class App {
public void do {
myUsersManager.do();
myStatsManager.do(); // here I get an exception, because the transaction is already started
}
}
だから、私の質問は、どのように私はこの問題を解決することができますか?私は自分のプロジェクトに150以上のトランザクションを持っているので、すべてのビジネスロジックを書き直すのは簡単な解決策ではありません。このような状況には標準的なアプローチがありますか、どこで見ていますか?
さて、私がやることは、春を学ぶことです。しかし、私はすでにDAOにトランザクションを入れている巨大な設計上の問題があることを考慮しました。 – Michael
とにかく、ありがとうございました。 – Michael
リファクタリングに値する可能性があります。トランザクションロジックが150クラスではなく1カ所にある場合、コードのサイズはどれくらい小さくなるか考えてみてください。これは、アスペクト指向のプログラミングがクロスカッティングに関する懸念のためにできることです。トランザクションは1つです。ロギングは別のものです。これをSpring iBatisに組み込むことは、それを実現させるほど難しくありません。 – duffymo