次のコードのutインスタンスの再利用は正しいですか?commit()の後にUserTransactionインスタンスを再利用することはできますか?
UserTransaction ut = (UserTransaction)ctx.lookup("java:comp/UserTransaction");
ut.begin();
doSomeWork();
ut.commit();//Or rollback (I think it doesn't matter)
ut.begin(); //Or rollback (I think it doesn't matter)
doOtherWork();
ut.commit();
JNDIリソースは、そのように定義されている場合:
Reference atomikosUserTransactionFactoryDS = new Reference("com.atomikos.icatch.jta.UserTransactionImp",
"com.atomikos.icatch.jta.UserTransactionFactory", null);
atomikosUserTransactionFactoryDS.add(new RefAddr("name") {
public Object getContent() {
return "UserTransaction";
}});
atomikosUserTransactionFactoryDS.add(new RefAddr("type") {
public Object getContent() {
return "com.atomikos.icatch.jta.UserTransactionImp";
}});
initContext.rebind("java:comp/UserTransaction", atomikosUserTransactionFactoryDS);
私は、私は別の参照を追加する必要があり、そのため、工場から新しいのUserTransactionを取得するかどうかの前に、あるわからないんだけど新しいUserTransactionを開始しますか?
私はそれが関係ないと思いますが、リソース定義の状態として、私はトランザクションマネージャーとしてAtomikosを使用しています(そして、それは工場として工場です)。
おかげで、
Ittai
アクションは、1つのものと1つのものだけを実行する必要があります。 1回のコールから複数のトランザクションを呼び出すなど、複数のことをやっているのはなぜですか? –
実際のシナリオはちょっと違っています。スレッド内でファイルを待っているwhile(true)ループのほうが多く、ut.begin、ut.commitを使用しているファイルが見つかると、それはより多くのループです。そのような反復の終わりにスレッドはスリープ状態になるので、スリープの前にトランザクションをコミットし、ファイルがある場合には起動すると新しい論理トランザクションが発生します。もちろん、ファイルが見つかるとコードをリファクタリングして、utをつかんで論理とコミットを行う別の方法に変更できますが、現在のデザインは私のものではなく、これが間違っていないことを確認したいだけです。あなたのコメントをありがとう。 – Ittai