- - PR -
EJBのトランザクション
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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 | ||||
|
投稿日時: 2003-03-18 10:12
このSample クラスがEJBのインターフェイスを実装し、EJBコンテナ上で動くのであれば、そのとおりに表示されるでしょう。 トランザクションというのは、複数の処理をまとめて確定させたい時に使います。DBの場合は必須ともいえますが、メモリ上だけの処理でも必要になる場合はありえます。 たとえば、ECサイトのバスケットEJBは、最後に清算するまではオンメモリで処理するかも知れません。その場合でも、在庫EJBの在庫数と連動しないといけないので、トランザクションで保護し、「バスケットに追加されたけど、在庫は減っていない」などの状態が外部から見えないようにする必要があります。 | ||||
1
