WEBワークショップ

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



1 2 3 4 5 6

ページトップへ
Java は、米国Sun Microsystems,Inc. の登録商標です。
原著:Copyright c 2000-2005 O’Reilly Media, Inc. All rights reserved.
邦訳:Copyright c 2005 Acroquest, Co.,Ltd. All rights reserved.