in src/main/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImpl.java [409:477]
public synchronized void addAllExcept(final Announcement target, final ClusterView clusterView,
final AnnouncementFilter filter) {
ResourceResolver resourceResolver = null;
try {
resourceResolver = resourceResolverFactory
.getServiceResourceResolver(null);
final Resource clusterInstancesResource = ResourceHelper
.getOrCreateResource(
resourceResolver,
config.getClusterInstancesPath());
final Iterator<Resource> it0 = clusterInstancesResource.getChildren()
.iterator();
Resource announcementsResource;
while (it0.hasNext()) {
final Resource aClusterInstanceResource = it0.next();
final String instanceId = aClusterInstanceResource.getName();
//TODO: add ClusterView.contains(instanceSlingId) for convenience to next api change
if (!contains(clusterView, instanceId)) {
// then the instance is not in my view, hence dont propagate
// its announcements
// (corresponds to earlier expiry-handling)
continue;
}
announcementsResource = aClusterInstanceResource
.getChild("announcements");
if (announcementsResource == null) {
continue;
}
Iterator<Resource> it = announcementsResource.getChildren()
.iterator();
while (it.hasNext()) {
Resource anAnnouncement = it.next();
if (logger.isDebugEnabled()) {
logger.debug("addAllExcept: anAnnouncement="
+ anAnnouncement);
}
Announcement topologyAnnouncement;
topologyAnnouncement = Announcement.fromJSON(anAnnouncement
.adaptTo(ValueMap.class).get(
"topologyAnnouncement", String.class));
if (filter != null && !filter.accept(aClusterInstanceResource.getName(), topologyAnnouncement)) {
continue;
}
target.addIncomingTopologyAnnouncement(topologyAnnouncement);
}
}
// even before SLING-3389 this method only did read operations,
// hence no commit was ever necessary. The close happens in the finally block
} catch (LoginException e) {
logger.error(
"handleEvent: could not log in administratively: " + e, e);
throw new RuntimeException("Could not log in to repository (" + e
+ ")", e);
} catch (PersistenceException e) {
logger.error("handleEvent: got a PersistenceException: " + e, e);
throw new RuntimeException(
"Exception while talking to repository (" + e + ")", e);
} catch (JsonException e) {
logger.error("handleEvent: got a JSONException: " + e, e);
throw new RuntimeException("Exception while converting json (" + e
+ ")", e);
} finally {
if (resourceResolver != null) {
resourceResolver.close();
}
}
}