第10章 共有データストアを使用したレプリケーションされたキャッシュ
このサンプルで実行するシナリオは、JBossCacheのドキュメントに記述したものと同じです。互いに内容をレプリケーションする2つの個別のノードから構成されます。更に、それらは同じデータストアを指しています。設定ファイルはjboss-cache/output/etc/META-INF/replAsyncSharedCacheLoader-service.xml
です。
<!-- クラスタに参加する場合に状態を取得するか否かにかかわらず --> <attribute name="FetchStateOnStartup">false</attribute> <attribute name="CacheLoaderClass">org.jboss.cache.loader.FileCacheLoader</attribute> <attribute name="CacheLoaderConfig"> location=c:\\tmp </attribute> <attribute name="CacheLoaderShared">true</attribute> <attribute name="CacheLoaderPreload">/</attribute> <attribute name="CacheLoaderFetchTransientState">false</attribute> <attribute name="CacheLoaderFetchPersistentState">true</attribute>
FetchStateOnStartup
属性をfalse
にセットすることは、新たに起動されたキャッシュが状態を取得を行わないことを意味します(一時的にも永続的にも)。従って、CacheLoaderFetchTransientState
属性とCacheLoaderFetchPersistentState
属性は無視されます。 CacheLoaderShared
をtrue
にセットすることは、両方のノードが同じデータソースを共有することを意味します。このサンプルではc:\tmp
に存在します(両方のノードが同じファイルシステムにアクセスできる前提)。c:\tmp
が存在することを確認するか、設定文字列を別の存在するディレクトリに指定してください。
新しいキャッシュのすべての内容はデータソースに存在し、アクセスされたときにCacheLoaderを通じて遅延ロードされるという意味で、設定は本質的に2つのcold
ノードを提供します。しかし、CacheLoaderPreload
がすべてのツリーのルートである"/"を指しているときには、正しくありません。従って、キャッシュのすべての内容は再帰的にプリロードされます。大量のデータをキャッシュに保持する場合、これはたぶん悪い設定です。なぜなら、全データがキャッシュにロードされるからです。
共有データソースを使用しているならば、変更をするノードはCacheLoaderを使用してデータストアに変更を書き出すことに留意してください。これは両方のノードが2回同じデータを書き込むことを防止します。
2つのシェルをオープンして、以下のantターゲットを実行することで2つのインスタンスを起動することができます。
bela@laptop /cygdrive/c/jboss-cache $ ./build.sh run.demo.async.shared.cacheloader Buildfile: build.xml init: compile: run.demo.async.shared.cacheloader: [java] ** node loaded: /a [java] ** node loaded: /a/b [java] ** node loaded: /a/b/c [java] ** node loaded: /uno [java] ** node loaded: /uno/due [java] ------------------------------------------------------- [java] GMS: address is 192.168.1.184:1357 [java] ------------------------------------------------------- [java] interceptor chain is: [java] class org.jboss.cache.interceptors.CallInterceptor [java] class org.jboss.cache.interceptors.ReplicationInterceptor [java] class org.jboss.cache.interceptors.CacheLoaderInterceptor [java] class org.jboss.cache.interceptors.TransactionInterceptor [java] ** view change: [192.168.1.184:1355|1] [192.168.1.184:1355, 192.168.1.184:1357] [java] ** node modified: /
2つのGUIインスタンスが現れキャッシュのツリー構造をグラフィカルに表示します。右クリックあるいはメニューを使用によってノードの追加/変更/削除が可能です。すべての変更は2つのノード間でレプリケーションされます。2つのノードを終了した後に片方あるいは両方のノードが再起動されると、CacheLoaderを通じて共有したデータストアに永続化されるためにシャットダウン前と同じ状態になります。
上記のサンプルでは同じマシン(192.168.1.184)のポート番号1355と1357で2つのノードが稼動していることを示していることに留意してください。