}
private void update(Collection<ActiveMQNode> members) {
// Find new registered services...
DiscoveryListener discoveryListener = this.discoveryListener.get();
if(discoveryListener!=null) {
HashSet<String> activeServices = new HashSet<String>();
for(ActiveMQNode m : members) {
for(String service: m.services) {
String resolved = service;
try {
resolved = ZooKeeperUtils.getSubstitutedData(curator, service);
} catch (Exception e) {
// ignore, we'll use unresolved value
}
// Lets only discover openwire service URLs
if( resolved.startsWith("tcp:")
|| resolved.startsWith("ssl:")
|| resolved.startsWith("nio:")
|| resolved.startsWith("nio+ssl:")) {
activeServices.add(resolved);
}
}
}
// If there is error talking the the central server, then activeServices == null
if( members !=null ) {
synchronized(discoveredServices) {
HashSet<String> removedServices = new HashSet<String>(discoveredServices.keySet());
removedServices.removeAll(activeServices);
HashSet<String> addedServices = new HashSet<String>(activeServices);
addedServices.removeAll(discoveredServices.keySet());
addedServices.removeAll(removedServices);
for (String service : addedServices) {
SimpleDiscoveryEvent e = new SimpleDiscoveryEvent(service);
discoveredServices.put(service, e);
discoveryListener.onServiceAdd(e);
}
for (String service : removedServices) {
SimpleDiscoveryEvent e = discoveredServices.remove(service);
if( e !=null ) {
e.removed.set(true);
}
discoveryListener.onServiceRemove(e);
}
}
}
}
}