Ehcacheの自動ピア・ディスカバリ周りのコードを読んでみる

CacheManagerPeerProvider

Ehcacheでは、CacheManager の自動ピア・ディスカバリ機能は、CacheManagerPeerProvider インタフェースおよび CacheManagerPeerListener の内部実装に依存しています。しかし、現状では、MulticastRMICacheManagerPeerProvider 以外の実装は存在しないようなので、そちらを読んでみることにします。

RMICacheManagerPeerProviderFactory

RMICacheManagerPeerProviderFactory は、CacheManagerPeerProvider を返すためのファクトリです。設定が peerDiscovery=automatic になっていると、MulticastRMICacheManagerPeerProvider を返します。

MulticastRMICacheManagerPeerProvider

CacheManagerの初期化では、CacheManagerPeerProvider が設定されている場合、その init() メソッドを呼び出します。MulticastRMICacheManagerPeerProviderinit() メソッドでは、以下の処理をしています。

heartBeatReceiver.init();
heartBeatSender.init();

heartBeatReceiver は MulticastKeepaliveHeartbeatReceiver クラスのインスタンスで、heartBeatSender は MulticastKeepaliveHeartbeatSender クラスのインスタンスです。

MulticastKeepaliveHeartbeatReceiver#init()

MulticastKeepaliveHeartbeatReceiver#init() メソッドでは、以下のような処理をしています。

  • マルチキャスト用のソケットを開く。
  • マルチキャストグループに参加。
  • データを受け取った場合の処理を任せるためのスレッド(MulticastReceiverThread)のインスタンスを生成。
  • スレッドを開始。
  • ThreadPoolExecutorインスタンスを作成。これは、ハートビートを受け取った処理の中で利用されます。

MulticastKeepaliveHeartbeatSender#init()

MulticastKeepaliveHeartbeatSender#init() メソッドでは、以下のような処理をしています。

  • ハートビートを定期的に投げるスレッド(MulticastServerThread)のインスタンスを生成。
  • スレッドの開始。

今回のまとめ

ということで、MulticastRMICacheManagerPeerProvider の初期化部分までソースを追ってみました。