The Interview: Bela Ban, JBossCache (jboss-fan ML:No.1965より)

JGroupsプロジェクトのfounder、Bela Banのインタビュー。JBossクラスタリングはJGroupsの提供するマルチキャスト通信ライブラリを使っています。JBossCacheは分散トランザクションキャッシュをサポートするJBossコンポーネントで、Entity Beanのキャッシュなどに使用されます。JBossCacheはTreeCacheとTreeCacheAOPから構成されます。TreeCacheはHibernateなどJBoss以外のプロジェクトでも使える汎用的なもので、TreeCacheAOPはTreeCacheをJBossAOP用のアスペクトとして利用できるようにしたものです。JBoss 3にもバックポートされるようなので是非使ってみたいです。

JBoss用分散トランザクションマネージャは?

JBoss3にはDTMはありません。TMがカバーするのは単一JBoss内だけです。JBoss4では? ロードマップには何も書いてなかったように思います。実際にやったことはないですが、JBoss Forumを見ているとTyrexやJOTMをインテグしている人もいるそうです。商用ではArjunaがありますので、どうしても必要なら打つ手はあるでしょう。

JBossCacheはDTMが無くとも使えると思っています。JBoss 3.2.3では、クラスタに参加しているマシンがローカルのTMにしたがって動きますので、複数のJBoss間で矛盾の無い状態を作りださなければなりません。現状は、コミットオプションAの場合*1、誰かがコミットとしたら、クラスタ内の他のマシン内の該当するキャッシュを無効にしています。JBossCacheでは、これを一歩進めて、そのときにキャッシュを無効にするのではなく、キャッシュを伝播させようとしているのだと思います。

やろうとしているのはキャッシュ間の一貫性の確保です。誰かがコミットすると、そのタイミングで修正データがクラスタ内の他のマシンに転送されます。まず、コミットする側のマシンが最初のフェーズで他のマシンのキャッシュをロックをして、それらがすべて成功したら実際にデータを転送しているのでしょう。ロックに失敗したら、それは誰かがデータを触っているということですから、トランザクションロールバックするのです。本当かな。早く実際に試してみたい。

*1:キャッシュをトランザクション間で保持するコンテナのモード