ListenerHandle registerClusterTopologyListener(ClusterTopologyListener listener) { // Synchronize on the listener to ensure that the initial topology is set before processing any changes from the registry listener synchronized (listener) { this.clusterTopologyListeners.add(listener); listener.clusterTopology(!this.clientMappingRegistry.getGroup().isSingleton() ? Collections.singletonList(getClusterInfo(this.clientMappingRegistry.getEntries())) : Collections.emptyList()); } return () -> this.clusterTopologyListeners.remove(listener); }
@Override public ListenerHandle registerClusterTopologyListener(@NotNull final ClusterTopologyListener clusterTopologyListener) { return (this.clusterTopologyRegistrar != null) ? this.clusterTopologyRegistrar.registerClusterTopologyListener(clusterTopologyListener) : () -> {}; }
@Override public void close() { if (this.clusterTopologyRegistrar != null) this.clusterTopologyRegistrar.close(); }
AssociationImpl(final DeploymentRepository deploymentRepository, final Registry<String, List<ClientMapping>> clientMappingRegistry) { this.deploymentRepository = deploymentRepository; this.clientMappingRegistry = clientMappingRegistry; this.clusterTopologyRegistrar = (clientMappingRegistry != null) ? new ClusterTopologyRegistrar(clientMappingRegistry) : null; }
@Override public void updatedEntries(Map<String, List<ClientMapping>> updated) { this.addedEntries(updated); }
@Override public void addedEntries(Map<String, List<ClientMapping>> added) { ClusterTopologyListener.ClusterInfo info = getClusterInfo(added); for (ClusterTopologyListener listener : this.clusterTopologyListeners) {// Synchronize each listener to ensure that the initial topology was set before processing new entries synchronized (listener) { listener.clusterNewNodesAdded(info); } } }