EJB 3のトランザクション(Atomicityプロパティ)3データベース操作にのみ適用されます - 正しいですか?
-
01-10-2019 - |
質問
私は、トランザクションを使用して原子性をもたらすことができることを知っています。
ifのように methodOne()
methodTwo()
methodThree()
メソッドのいずれかが失敗した場合、操作全体がロールバックされた場合、1つのトランザクションにクラブされます。ロールバックはデータベースレベルのロールバックになり、その結果、データベースはトランザクションの前と同様に状態になります。
しかし、メソッドが状態変数または静的変数に変更を加えたり、ファイルシステム内のいくつかのファイルに書いたりした場合はどうでしょうか?私の理解では、「ロールバック」はこのような非控えめな変更には適用されず、それらの変更が元に戻されていないことです。私の理解は正しいですか?
解決
EJB 3のトランザクション(Atomicityプロパティ)3データベース操作にのみ適用されます - 正しいですか?
いいえ、あなたはそうではありません。トランザクションが適用されます トランザクションリソース, 、Java EE仕様は、JDBCデータベース、JMS宛先、および「JCAを介してアクセスされるその他のトランザクションサービス」の3種類のトランザクションリソースを認識しています。
しかし、メソッドが状態変数または静的変数に変更を加えたり、ファイルシステム内のいくつかのファイルに書いたりした場合はどうでしょうか?
これらはトランザクションリソースではありません(後のJCAコネクタを介してファイルシステムに書き込んでいない限り)。
他のヒント
ファイルシステムリソースはトランザクションではありません。したがって、変更を戻す必要があります。または、コンテナが提供するファイルシステムリソースアダプターを見る必要があります。
そのコンテキストでのトランザクションは、データベーストランザクションを指します。変数を変更するJavaコードを配置したり、ファイルシステムに出力を生成したりすると、それをうまく使用していません。トランザクションを開始し、データベースのみで操作を行う必要があります。
ただし、DBMが(たとえば、ストアの手順を介して)ファイルシステムに変更を加えた場合は、そのDBMのドキュメントを確認する必要があります。
したがって、「トランザクションの開始」コマンドの後にコードがある場合は、コードを読み取る必要があります。レビューする必要があります。