...
When a client connects to the server with subscription enabled flag, a HARegionQueue for that client-proxy is created on the server side.
Class Diagrams
PlantUML |
---|
skinparam dpi 80 @startuml hide empty members title Server to Client Queues - Class Diagram class CacheClientNotifier { Singleton for a Cache. } class CacheClientProxy { One for each client. Keeps track of a the subscriptions for the client. } class MessageDispatcher { Thread that reads events from the queue. } class HARegionQueue { Holds the list of events to dispatch to a single client. } class HAContainerMap { Holds the actual values for events to dispatch. Used to store only a single copy of each value across all queues. } interface HAContainerMap CacheClientNotifier o-- CacheClientProxy CacheClientProxy o-- MessageDispatcher CacheClientNotifier o-- HAContainerMap MessageDispatcher o-- HARegionQueue HARegionQueue --> HAContainerMap HARegionQueue o-- HARegion @enduml |
Sequence Diagrams
PlantUML |
---|
skinparam dpi 80 title Put into Queue (for Partitioned Regions) actor user user -> "PR Primary" : put "PR Primary" -> "PR Secondary" : UpdateMessage "PR Primary" -> "Adjunct Receiver": PutMessage note right The primary notifies all members that have clients with interest end note "PR Primary" -> CacheClientNotifier: notifyClients() "Adjunct Receiver" -> CacheClientNotifier: notifyClients() note right All members with interest call notifyClients locally end note "PR Secondary" -> CacheClientNotifier: notifyClients() CacheClientNotifier -> CacheClientProxy: deliverMessage() CacheClientProxy -> MessageDispatcher : enqueueMessage() MessageDispatcher -> HARegionQueue: basicPut() |
...
This is done at the end of “HARegionQueue.putObject()”.