JTA トランザクション処理の例として、オンラインで見つけた次のコード (ここ) を使用しています。
// Get a UserTransaction
UserTransaction txn = new InitialContext().lookup("java:comp/UserTransaction");
try {
System.out.println("Starting top-level transaction.");
txn.begin();
stmtx = conn.createStatement(); // will be a tx-statement
stmtx.executeUpdate("INSERT INTO test_table (a, b) VALUES (1,2)");
stmtx.executeUpdate("INSERT INTO test_table2 (a, b) VALUES (3,4)");
System.out.print("\nNow attempting to rollback changes.");
txn.rollback();
}
一般的に、上記の例から引き出された JTA についていくつか質問があります。
- 私は言うことの要点を推測し、
txn.begin
ロールバックは(明らかに)2つのSQLステートメントを正しくロールバックできることですか? - それぞれの更新クエリは TRANSACTIONS そのものでしたよね? 一番下のロールバック呼び出しに到達できるように、それらは成功したに違いありません。彼らが成功した、つまりコミットした場合、一体どうすれば突然それらを元に戻すことができるのでしょうか?
- 最も重要な質問: と言うとどうなり
txn.begin()
ますか?TransactionManager
JTA API から、このトランザクションをインスタンスごとに呼び出しスレッドに登録することになっていることがわかりました。TM はどのように にリンクされていUserTransaction
ますか? そして最後に、txn は、DB を 2 回変更し、DB と対話してロールバックできるという事実をどのように認識するのでしょうか? ANY を登録していないResourceManager
ため、使用中のリソースを認識する必要はありません...
私はここで少し迷っているので、情報をいただければ幸いです... 質問 3 が最も気になります。