@Override public void registerService(final OSGIServiceDescriptor desc, final CatalogPluginApi service) { log.info("Registering service='{}'", desc.getRegistrationName()); pluginsByName.put(desc.getRegistrationName(), service); }
@Override public void registerService(final OSGIServiceDescriptor desc, final CurrencyPluginApi service) { log.info("Registering service='{}'", desc.getRegistrationName()); pluginsByName.put(desc.getRegistrationName(), service); }
@Override public void registerService(final OSGIServiceDescriptor desc, final InvoicePluginApi service) { log.info("Registering service='{}'", desc.getRegistrationName()); pluginsByName.put(desc.getRegistrationName(), service); }
private void registerServiceInternal(final OSGIServiceDescriptor desc) { pluginRegistrations.put(desc.getRegistrationName(), desc); }
@Override public void registerService(final OSGIServiceDescriptor desc, final CatalogPluginApi service) { log.info("Registering service='{}'", desc.getRegistrationName()); pluginsByName.put(desc.getRegistrationName(), service); }
@Override public void registerService(final OSGIServiceDescriptor desc, final CurrencyPluginApi service) { log.info("Registering service='{}'", desc.getRegistrationName()); pluginsByName.put(desc.getRegistrationName(), service); }
private OSGIServiceDescriptor unRegisterServiceInternal(final OSGIServiceDescriptor desc) { return pluginRegistrations.remove(desc.getRegistrationName()); }
private String getPathPrefixFromDescriptor(final OSGIServiceDescriptor desc) { return sanitizePathPrefix(desc.getRegistrationName()); }
@Override public void unregisterService(final String serviceName) { synchronized (this) { final OSGIServiceDescriptor desc = pluginRegistrations.get(serviceName); if (desc != null) { final String pathPrefix = getPathPrefixFromDescriptor(desc); if (pathPrefix == null) { logger.warn("Skipping unregistration of OSGI servlet for service {} (service info is not specified)", desc.getRegistrationName()); return; } logger.info("Unregistering OSGI servlet " + desc.getRegistrationName() + " at path " + pathPrefix); synchronized (this) { unRegisterServletInternal(pathPrefix); unRegisterServiceInternal(desc); } } } }
@Override public void registerService(final OSGIServiceDescriptor desc, final Servlet httpServlet) { // Enforce each route to start with / final String pathPrefix = getPathPrefixFromDescriptor(desc); if (pathPrefix == null) { logger.warn("Skipping registration of OSGI servlet for service {} (service info is not specified)", desc.getRegistrationName()); return; } logger.info("Registering OSGI servlet at " + pathPrefix); synchronized (this) { registerServletInternal(pathPrefix, httpServlet); registerServiceInternal(desc); } }
private <T> boolean listenForServiceType(final ServiceReference serviceReference, final int eventType, final Class<T> claz, final OSGIServiceRegistration<T> registration) { // Make sure we can retrieve the plugin name final String serviceName = (String) serviceReference.getProperty(OSGIPluginProperties.PLUGIN_NAME_PROP); if (serviceName == null || !checkSanityPluginRegistrationName(serviceName)) { // Quite common for non Killbill bundles logger.debug("Ignoring registered OSGI service {} with no {} property", claz.getName(), OSGIPluginProperties.PLUGIN_NAME_PROP); return true; } final Object theServiceObject = context.getService(serviceReference); // Is that for us? We look for a subclass here for greater flexibility (e.g. HttpServlet for a Servlet service) if (theServiceObject == null || !claz.isAssignableFrom(theServiceObject.getClass())) { return false; } final T theService = (T) theServiceObject; final OSGIServiceDescriptor desc = new DefaultOSGIServiceDescriptor(serviceReference.getBundle().getSymbolicName(), serviceName); switch (eventType) { case ServiceEvent.REGISTERED: final T wrappedService = ContextClassLoaderHelper.getWrappedServiceWithCorrectContextClassLoader(theService); registration.registerService(desc, wrappedService); break; case ServiceEvent.UNREGISTERING: registration.unregisterService(desc.getRegistrationName()); break; default: break; } return true; }