分散キャッシュ関連インタフェース設計
Ehcacheの分散キャッシュ周りの設定を見ると、実装は差し替えが可能な設計になっているっぽいですね。ということで、インタフェースレベルの設計を見てみました。
クラスタ
Ehacache は、CacheManager 単位で分散キャッシュのクラスタを構成するように設計されています。分散キャッシュを用いる場合、CacheManagerPeerProvider と CacheManagerPeerListener に関する設定を行う必要があります。
CacheManagerPeerProvider
CacheManagerPeerProvider は、分散環境中のCache群を、取得するためのインタフェースです。分散オブジェクトを扱う気満々な感じの設計ですね。
CacheManager に対する設定として、CacheManagerPeerProviderFactory のFQCNと、プロパティの文字列を渡す方式になっています。
CacheManagerPeerListener
CacheManagerPeerListener は、CacheManager が外部公開するCacheを扱うためのインタフェースです。RMI RegistoryにbindされたCacheを扱う気満々に見えますね。
CacheManager に対する設定として、CacheManagerPeerListenerFactory のFQCNと、プロパティの文字列を渡す方式になっています。
CacheEventListener
CacheEventListener は、Cacheに対する汎用的なリスナーで、分散環境に特化したものではありません。しかし、分散キャッシュを行うためには、Cacheの状態変化をピアに伝播する必要があることから、このインタフェースを実装した分散環境用のクラスが必要になります。
Cacheに対する設定として、CacheEventListenerFactory のFQCNと、プロパティの文字列を渡す方式になっています。
RMIを前提とした設計のようです
最初は、インタフェース設計に不当に実装の概念を持ち込んでいるのではと思いましたが、そもそもRMIを前提とした設計のようです。CacheManagerPeerProvider のJavaDocには、モロに、
Provides a discovery service to locate CachePeer RMI listener peers for a Cache.
と書かれてますから。