in src/main/java/org/apache/sling/resourceresolver/impl/providers/ResourceProviderTracker.java [101:136]
public void activate(final BundleContext bundleContext, final EventAdmin eventAdmin, final ChangeListener listener) {
this.bundleContext = bundleContext;
this.eventAdmin = eventAdmin;
this.listener = listener;
this.tracker = new ServiceTracker<>(bundleContext,
ResourceProvider.class,
new ServiceTrackerCustomizer<ResourceProvider, ServiceReference<ResourceProvider>>() {
@Override
public void removedService(final ServiceReference<ResourceProvider> reference, final ServiceReference<ResourceProvider> ref) {
final ResourceProviderInfo info = infos.remove(ref);
if ( info != null ) {
Object pid = ref.getProperty(Constants.SERVICE_PID);
if ( pid != null && !(pid instanceof String) ) {
pid = null;
}
unregister(info, (String)pid);
}
}
@Override
public void modifiedService(final ServiceReference<ResourceProvider> reference, final ServiceReference<ResourceProvider> service) {
removedService(reference, service);
addingService(reference);
}
@Override
public ServiceReference<ResourceProvider> addingService(final ServiceReference<ResourceProvider> reference) {
final ResourceProviderInfo info = new ResourceProviderInfo(reference);
infos.put(reference, info);
register(info);
return reference;
}
});
this.tracker.open();
}