0

私は非常に興味深い状況にあります。私はJBossとOracleに少し慣れていませんが、主にDB2上のWeblogicを使用しています。そうは言っても、私がやろうとしていることは非常に単純です。

Oracleデータベースへのlocal-tx-datasourceがあります。Java Iコードから、適切なJNDI名を使用してデータソースを取得した後、datasource.getConnection()を呼び出します。-ds.xmlファイルのlocal-tx-datasource宣言には、自動コミット動作への明示的な参照がありません。

接続を取得した後、作成/更新クエリを実行すると、正しい更新カウントが返されます。その後、短期間でこのレコードを取得することもできます。しかし、その後、データベースはそもそもレコードを取得しなかったふりをし、何もありません。

接続に関する私の経験は、これは接続がその作業をコミットしないときに発生することを示唆しているため、その接続自体のみがトランザクション内のデータを見ることができます。私が読んだところによると、JBossも、返される接続が自動コミットであるという仕様に従います。これをJavaコードから確認したところ、自動コミット動作がtrueに設定されていることが示されています。しかし、その場合、レコードが作成/更新されないのはなぜですか?

これに続いて、Connectionの自動コミット動作をfalseに設定し(これもJavaコードから)、明示的にコミットを実行しました。それ以来、問題はありません。

何がうまくいかない可能性がありますか?ここでの自動コミットについての私の理解は正しくありませんか、それともJBossには他の解釈がありますか?ご注意ください、私は全く取引をしていません。これらは非常に単純な単一レコード挿入クエリです。

4

1 に答える 1