- PR -

EJBのトランザクション

1
投稿者投稿内容
katsum
大ベテラン
会議室デビュー日: 2002/02/27
投稿数: 119
お住まい・勤務地: 東京都
投稿日時: 2003-03-12 11:31
 EJBの解説書・記事を読んでいると、トランザクションが大前提
として出てきますが、トランザクション=DBのCOMMIT/ROLLBACKと
いう理解しかない私にはどうもよくわかりません。

 つまり、DB以外のオブジェクト操作もEJBコンテナによってトラ
ンザクションが可能となっているのでしょうか?例で示しますと、
以下のようなコードで、最後に 0 と表示されることがあるのか?
ということです。

 それとも結局行き着くところは、オブジェクトが分散している
だけの話で、DBしかトランザクションの対象にならないという
ことでしょうか?

Public class Sample {
 int i;
 public Sample() {this.i = 0;}
 public void setValue(int i) {
  this.i = i;
 }
 public int getValue() {
  return this.i;
 }
}

START
 Sample s = new Sample(); // この時点で i は 0
 EBJトランザクション開始()
 s.setValue(1);           // i を 1 に設定しました。
 EBJロールバック()          // s.setValue(1); の操作も取り消されるの?
 System.out.println("Value is 0 or 1 ?: " + s.getValue());
END
へげもん
ベテラン
会議室デビュー日: 2002/04/14
投稿数: 87
お住まい・勤務地: 埼玉県
投稿日時: 2003-03-18 10:12
引用:

以下のようなコードで、最後に 0 と表示されることがあるのか?
ということです


このSample クラスがEJBのインターフェイスを実装し、EJBコンテナ上で動くのであれば、そのとおりに表示されるでしょう。

トランザクションというのは、複数の処理をまとめて確定させたい時に使います。DBの場合は必須ともいえますが、メモリ上だけの処理でも必要になる場合はありえます。
たとえば、ECサイトのバスケットEJBは、最後に清算するまではオンメモリで処理するかも知れません。その場合でも、在庫EJBの在庫数と連動しないといけないので、トランザクションで保護し、「バスケットに追加されたけど、在庫は減っていない」などの状態が外部から見えないようにする必要があります。
1

スキルアップ/キャリアアップ(JOB@IT)