HOME > WEBワークショップ > JBoss Cache as a POJO Cache 日本語訳
JBoss Cache as a POJO Cache 日本語訳
6.ユースケース・ウォークスルー(続き)
●実行結果
この例を実行した際の結果は、以下のように出力されます。
Initial state
---------------------------------------------
Japan (Summary : 2000 [ok])
+ Tokyo (Summary : 2000 [ok])
+ + WindSensor1 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1000, state =1040)
+ + | ( name = sensor unit, id = 1001, state =1040)
+ + RainSensor1 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1002, state =1040)
+ + | ( name = sensor unit, id = 1003, state =1040)
+ Yokohama (Summary : 2000 [ok])
+ + WindSensor2 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1000, state =1040)
+ + | ( name = sensor unit, id = 1001, state =1040)
+ + RainSensor2 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1002, state =1040)
+ + | ( name = sensor unit, id = 1003, state =1040)
---------------------------------------------
Modified on Manager #1
StateItem.setState(): id: 1003 state changed \
from 1040 to 1041
---------------------------------------------
Japan.Tokyo.RainSensor1: id: 1003 state: 1040->1041 \
(retrieved from Manager #2!)
---------------------------------------------
Japan (Summary : 2004)
+ Tokyo (Summary : 2004)
+ + WindSensor1 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1000, state =1040)
+ + | ( name = sensor unit, id = 1001, state =1040)
+ + RainSensor1 (Summary : 2004)
+ + | ( name = power supply, id = 1002, state =1040)
+ + | ( name = sensor unit, id = 1003, state =1041)
+ Yokohama (Summary : 2000 [ok])
+ + WindSensor2 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1000, state =1040)
+ + | ( name = sensor unit, id = 1001, state =1040)
+ + RainSensor2 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1002, state =1040)
+ + | ( name = sensor unit, id = 1003, state =1040)
---------------------------------------------
Modified on Manager #2
StateItem.setState(): id: 1001 state changed \
from 1040 to 1041
---------------------------------------------
Japan.Yokohama.WindSensor2: id: 1001 state: 1040->1041 \
(retrieved from Manager #1!)
---------------------------------------------
Japan (Summary : 2004)
+ Tokyo (Summary : 2004)
+ + WindSensor1 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1000, state =1040)
+ + | ( name = sensor unit, id = 1001, state =1040)
+ + RainSensor1 (Summary : 2004)
+ + | ( name = power supply, id = 1002, state =1040)
+ + | ( name = sensor unit, id = 1003, state =1041)
+ Yokohama (Summary : 2004)
+ + WindSensor2 (Summary : 2004)
+ + | ( name = power supply, id = 1000, state =1040)
+ + | ( name = sensor unit, id = 1001, state =1041)
+ + RainSensor2 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1002, state =1040)
+ + | ( name = sensor unit, id = 1003, state =1040)
---------------------------------------------
Add a new VibrationSensor on Tokyo station
StateItem.setState(): id: 1004 state changed from \
2000 to 1040
StateItem.setState(): id: 1005 state changed from \
2000 to 1040
---------------------------------------------
Japan.Tokyo.VibrationSensor1: (retrieved from cache #2)
---------------------------------------------
Japan (Summary : 2004)
+ Tokyo (Summary : 2004)
+ + WindSensor1 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1000, state =1040)
+ + | ( name = sensor unit, id = 1001, state =1040)
+ + RainSensor1 (Summary : 2004)
+ + | ( name = power supply, id = 1002, state =1040)
+ + | ( name = sensor unit, id = 1003, state =1041)
+ + VibrationSensor1 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1004, state =1040)
+ + | ( name = sensor unit, id = 1005, state =1040)
+ Yokohama (Summary : 2004)
+ + WindSensor2 (Summary : 2004)
+ + | ( name = power supply, id = 1000, state =1040)
+ + | ( name = sensor unit, id = 1001, state =1041)
+ + RainSensor2 (Summary : 2000 [ok])
+ + | ( name = power supply, id = 1002, state =1040)
+ + | ( name = sensor unit, id = 1003, state =1040)
ボールドになっている部分に注目してください。POJOの操作である setState() メソッドを最初に Manager#1 で実行しています。次に、Manager#2
のプロパゲーションツリーを出力し、Manager#1 に対して行った変更が Manager#2 に反映されていることを確かめています。また、その反対も同様です。
これを繰り返しを行ったとしても無駄が生じることはなく、トラフィックこそ示してはいませんが、setState() メソッドの操作はフィールド単位でのレプリケーションが実行されています。
加えて、この呼び出しがトランザクション・コンテクストの下で行われた場合、更新はバッチ実行されます。例えば、レプリケーションはコミットの準備が整ったときに実行されるのです。
最後に、実行時に新しいセンサーをネットワークに加える機能を持っている事にも注目して下さい。従来のシステムでは、このような操作は再起動のメカニズムを必要としたことでしょう。
もし、このサンプルを実際に動かしてみたいと思った方は、JBossCache の release 1.2.4 をダウンロードしてみてください。examples/aop/sensor ディレクトリ配下に全ソースコードと実行方法の説明が収録されています。
4.結論
この記事では、POJOキャッシュとして振る舞うJBossCacheを、JBossCacheAop コンポーネントを利用して説明しました。POJOキャッシュの機能を利用することで、フィールド単位でのレプリケーションとオブジェクト・グラフを保ったままのレプリケーションを行い、シームレスなフェイルオーバーの能力をPOJOに与えることができます。
5.謝辞
Acroquest Technology 株式会社の小森裕介氏に、本記事におけるユースケースを快く提供してくれたことを感謝します。
6.著者
Ben Wang氏は10年の開発経験を持ち、2年以上に渡ってのJBossのオープンソース開発者です。
現在、彼はJBossにおけるクラスタリングとJBossCacheAopプロジェクトのリーダーとして活躍しています。
7.参考
1. JBossCacheドキュメント
2. JGroupsドキュメント
3. JBossAop
原著:Copyright c 2000-2005 O’Reilly Media, Inc. All rights reserved.
邦訳:Copyright c 2005 Acroquest, Co.,Ltd. All rights reserved.


