in topology-manager/src/main/java/org/apache/aries/rsa/topologymanager/exporter/TopologyManagerExport.java [157:190]
private Collection<ExportRegistration> exportService(final RemoteServiceAdmin rsa, final ServiceReference<?> sref) {
// abort if the service was unregistered by the time we got here
// (we check again at the end, but this optimization saves unnecessary heavy processing)
if (sref.getBundle() == null) {
LOG.info("TopologyManager: export aborted for {} since it was unregistered", sref);
return Collections.emptyList();
}
LOG.debug("exporting Service {} using RemoteServiceAdmin {}", sref, rsa.getClass().getName());
Map<String, ?> addProps = policy.additionalParameters(sref);
Collection<ExportRegistration> regs = rsa.exportService(sref, addProps);
// process successful/failed registrations
for (ExportRegistration reg : regs) {
if (reg.getException() == null) {
EndpointDescription endpoint = reg.getExportReference().getExportedEndpoint();
LOG.info("TopologyManager: export succeeded for {}, endpoint {}, rsa {}", sref, endpoint, rsa.getClass().getName());
} else {
LOG.error("TopologyManager: export failed for {}", sref, reg.getException());
reg.close();
}
}
// abort export if service was unregistered in the meanwhile (since we have a race
// with the unregister event which may have already been handled, so we'll miss it)
if (sref.getBundle() == null) {
LOG.info("TopologyManager: export reverted for {} since service was unregistered", sref);
for (ExportRegistration reg : regs) {
reg.close();
}
}
return regs;
}