if (addedNodes == null || addedNodes.isEmpty()) {
return;
}
final SocketBinding ejbRemoteConnectorSocketBinding = this.ejbRemoteConnectorServiceValue.getValue().getEJBRemoteConnectorSocketBinding();
final InetAddress bindAddress = ejbRemoteConnectorSocketBinding.getAddress();
final ClusterContext clusterContext = ejbClientContext.getOrCreateClusterContext(clusterName);
// add the nodes to the cluster context
for (Map.Entry<String, List<ClientMapping>> entry : addedNodes.entrySet()) {
final String addedNodeName = entry.getKey();
// if the current node is being added, then let the local receiver handle it
if (LocalEjbReceiver.this.getNodeName().equals(addedNodeName)) {
clusterContext.addClusterNodes(new LocalClusterNodeManager());
continue;
}
// if the EJB client context is the default server level EJB client context
// which can only handle local receiver and no remote receivers (due to lack of configurations
// to connect to them), then skip that context
if (this.isLocalOnlyEJBClientContext(ejbClientContext)) {
logger.debug("Skipping cluster node additions to EJB client context " + ejbClientContext + " since it can only handle local node");
continue;
}
// find a matching client mapping for our bind address
final List<ClientMapping> clientMappings = entry.getValue();
ClientMapping resolvedClientMapping = null;
for (final ClientMapping clientMapping : clientMappings) {
final InetAddress sourceNetworkAddress = clientMapping.getSourceNetworkAddress();
final int netMask = clientMapping.getSourceNetworkMaskBits();
final boolean match = NetworkUtil.belongsToNetwork(bindAddress, sourceNetworkAddress, (byte) (netMask & 0xff));
if (match) {
resolvedClientMapping = clientMapping;
logger.debug("Client mapping " + clientMapping + " matches client address " + bindAddress);
break;
}
}
if (resolvedClientMapping == null) {
EjbLogger.ROOT_LOGGER.cannotAddClusterNodeDueToUnresolvableClientMapping(addedNodeName, clusterName, bindAddress);
continue;
}
final ClusterNodeManager remotingClusterNodeManager = new RemotingConnectionClusterNodeManager(clusterContext, this.endpointInjectedValue.getValue(), addedNodeName, resolvedClientMapping.getDestinationAddress(), resolvedClientMapping.getDestinationPort());
clusterContext.addClusterNodes(remotingClusterNodeManager);
}
}