Cluster続き

メッセージ送信の場合、
GroupChannel.send()から始まり、各InterceptorのsendMessage()を
経由して、ChannelCoordinatorのsendMessage()に到達。
その後、ChannelSender(ReplicationTransmitter→PooledParallelSender)の
sendMessage()が実行されて実際に送信される。

メッセージ受信の場合、
1.NioReceiver.listen()で受信確認
2.NioReceiver.readDataFromSocket()でworker(NioReplicationThread)を確保
3.NioReplicationThread.serviceChannel()で受信socket設定とThreadの起動
4.NioReplicationThread.run()がwait()状態から回復
5.NioReplicationThread.drainChannel()で色々やってから(詳細見てない)getCallback().messageDataReceived()で読み込み
getCallback()はWorkerThread.getCallback()(NioReplicationThreadの親クラス)
callbakcにはNioReceiverが指定されている。
messageDataReceived()はNioReceiverの親クラスであるReceiverBaseにある。
6.ReceiverBase.messageDataReceived()ではlistener.messageReceived()を実行
listenerにはChannelCoordinatorが指定されている(ChannelCoordinator.setClusterReceiver())
7.ChannelCoordinator.messageReceived()はChannelInterceptorBase.messageReceived()を呼び出す
8.ChannelInterceptorBase.messageReceived()はInterceptorsリストを順にさかのぼってmessageReceived()を呼び出す
9.最終的に(途中で止まらなければ)GroupChannel.messageReceived()が呼び出される
10.GroupChannel.messageReceived()ではchannelListenersリストに登録されたChannelListenerのmessageReceived()を呼び出す。
登録されているChannelListenerは、SimpleTcpClusterやAbstractReplicatedMap(ReplicatedMap、LazyReplicatedMap)、RpcChannel。

メンバーシップ受信(memberAdded、memberDisappeared)の場合
1.McastServiceImpl#ReceiverThread.run()で、McastServiceImpl.receive()を実行
2.受け取ったメッセージがメンバ削除であれば、service.memberDisappeared()、
メンバ登録であれば、service.memberAdded()を実行。
serviceはMembershipListenerで、McastService.start(int)でMcastServiceImplのインスタンス作成時に
McastService自身が渡されている。
従って、service.memberXXX()はMcastService.memberXXX()となる。
3.McastService.memberXXX()では、listener.memberXXX()が呼び出される。
listenerはMembershipListenerで、McastService.setMembershipListener()が
ChannelCoordinator.setMembershipService()によりChannelCoordinator自身が指定される。
従って、ChannelCoordinator.memberXXX()が呼び出される。
4.ChannelCoordinator.memberXXX()はChannelInterceptorBase.memberXXX()を呼び出す。
5.以降、ChannelInterceptorsを遡ってmemberXXX()を実行する。
6.最終的に(途中で止まらなければ)GroupChannel.memberXXX()が呼び出される
7.GroupChannel.memberXXX()ではmembershipListenersリストに登録されたMembershipListenerのmemberXXX()を呼び出す。
登録されているMembershipListenerは、SimpleTcpCluster、AbstractReplicatedMap(ReplicatedMap、LazyReplicatedMap)。
SimpleTcpCluster.messageReceived()は、更にClusterListener.messageReceived()を呼び出す・・・

heartbeatの場合
・まだ見てない