2

トランザクションを使用して原子性を実現できることを知っています。

methodOne() methodTwo() methodThree()1 つのトランザクションにまとめられた場合と同様に、メソッドのいずれかが失敗すると、操作全体がロールバックされます。ロールバックはデータベース レベルのロールバックとなり、その結果、データベースはトランザクション前の状態になります。

しかし、メソッドが状態変数または静的変数に変更を加えたり、ファイルシステム内のいくつかのファイルに書き込んだりした場合はどうなるでしょうか? 私の理解では、「ロールバック」はそのようなデータベース以外の変更には適用されず、それらの変更は元に戻されません。私の理解は正しいですか?

4

3 に答える 3

4

EJB 3のトランザクション(Atomicityプロパティ)はデータベース操作にのみ適用されます-私は正しいですか?

いいえ、違います。トランザクションはトランザクションリソースに適用されます。JavaEE仕様では、JDBCデータベース、JMS宛先、および「JCAを介してアクセスされるその他のトランザクションサービス」の3種類のトランザクションリソースが認識されます。

しかし、メソッドが状態変数または静的変数に変更を加えたり、ファイルシステム内のいくつかのファイルに書き込んだりした場合はどうなるでしょうか。

これらはトランザクションリソースではありません(後で使用するためにJCAコネクタを介してファイルシステムに書き込んでいる場合を除く)。

于 2010-07-01T14:58:30.630 に答える
1

ファイル システム リソースはトランザクション対応ではありません。そのため、変更をロールバックする必要があります。または、コンテナーによって提供されるファイル システム リソース アダプターを確認する必要があります。

于 2010-07-01T14:49:19.537 に答える
0

そのコンテキストでのトランザクションは、データベース トランザクションを参照します。変数を変更したり、ファイルシステムに出力を生成したりする Java コードを配置すると、それをうまく使用できません。トランザクションを開始し、データベースに対してのみ操作を行う必要があります。

ただし、DBMS が (ストア プロシージャなどを使用して) ファイル システムに変更を加える場合は、その DBMS のドキュメントを確認する必要があります。

したがって、コードを読んでください。「START TRANSACTION」コマンドの後にコードがある場合は、それを確認する必要があります。

于 2010-07-01T14:57:32.917 に答える