in winegrower-core/src/main/java/org/apache/winegrower/service/OSGiServices.java [327:348]
private void fireEvent(final ServiceRegistration<?> reg, final ServiceEvent event) {
final List<ServiceListenerDefinition> listeners = getListeners(reg);
final Collection<ServiceReference<EventListenerHook>> eventListenerHooks = hooks.getEventListenerHooks();
if (!eventListenerHooks.isEmpty() && !listeners.isEmpty()) {
eventListenerHooks.forEach(hook -> {
final BundleContext bundleContext = hook.getBundle().getBundleContext();
final EventListenerHook instance = bundleContext.getService(hook);
if (instance != null) {
try {
final Map<BundleContext, ? extends Collection<ListenerHook.ListenerInfo>> listenerInfo = listeners.stream()
.collect(groupingBy(ServiceListenerDefinition::getBundleContext, toList()));
instance.event(event, (Map<BundleContext, Collection<ListenerHook.ListenerInfo>>) listenerInfo);
} catch (final Throwable th) {
LoggerFactory.getLogger(BundleContextImpl.class).warn("Can't call '{}'", hook, th);
} finally {
bundleContext.ungetService(hook);
}
}
});
}
listeners.forEach(listener -> listener.listener.serviceChanged(event));
}