Class InjectorAwareServiceRegistrator


  • public class InjectorAwareServiceRegistrator
    extends ServiceRegistrator
    Injector aware OSGi services registration support.

    Typical usage is to create registrator instance in plug-in Activator, register some internal services or instances as OSGi services and unregister with plug-in stop.

    Also supports IManagedService activation and de-activation.

    Order of InjectorAwareServiceRegistrator creation and usage is next:

    1. Creating registrator instance.
    2. Activating lifecycle-managed services.
    3. Registering public OSGi services.
    4. Registered services may be used by other plug-ins.
    5. Unregistering public OSGi services.
    6. Dectivating lifecycle-managed services.

    Example of usage in plug-in Activator:

     public class ServicesProducerPlugin
         extends Plugin
     {
         private static ServicesProducerPlugin plugin;
         private InjectorAwareServiceRegistrator registrator;
    
         public static ServicesProducerPlugin getDefault()
         {
             return plugin;
         }
    
         @Override
         public void start(BundleContext context) throws Exception
         {
             super.start(context);
             plugin = this;
    
             registrator = new InjectorAwareServiceRegistrator(context, this::getInjector);
    
             // activate all managed services
             registrator.activateManagedServices(ImmutableList.of(ISomeManagedService.class));
    
             // register services from injector
             registrator.service(ISomeManagedService.class).registerInjected();
             registrator.service(ISomeService.class).registerInjected();
    
             // register qualified service from injector
             registrator.service(ISomeQualifiedService.class).withProperties(ServiceProperties.named("MdImplementation"))
                 .registerInjected(ISomeQualifiedService.class, Names.named("MdImplementation"));
    
             // register instance
             registrator.service(ISomeInstanceService.class).registerInstance(new ISomeInstanceService()
             {
                 @Override
                 public void method()
                 {
                     // do nothing
                 }
             });
         }
    
         @Override
         public void stop(BundleContext context) throws Exception
         {
             // unregister all registered services
             registrator.unregisterServices();
    
             // deactivate all managed services
             registrator.deactivateManagedServices(this);
    
             plugin = null;
             super.stop(context);
         }
    
         ...
    
     }
     
    See Also:
    ServiceProperties, IManagedService
    • Constructor Detail

      • InjectorAwareServiceRegistrator

        public InjectorAwareServiceRegistrator​(org.eclipse.core.runtime.Plugin bundle,
                                               com.google.inject.Injector injector)
        Parameters:
        context - the bundle context to register service in, cannot be null
        injector - the injector to use to get service instances, cannot be null
      • InjectorAwareServiceRegistrator

        public InjectorAwareServiceRegistrator​(org.eclipse.core.runtime.Plugin bundle,
                                               Supplier<com.google.inject.Injector> injectorSupplier)
        Parameters:
        context - the bundle context to register service in, cannot be null
        injectorSupplier - the injector Supplier to use to get service instances in lazy-mode, cannot be null
      • InjectorAwareServiceRegistrator

        public InjectorAwareServiceRegistrator​(org.osgi.framework.BundleContext context,
                                               com.google.inject.Injector injector)
        Parameters:
        context - the bundle context to register service in, cannot be null
        injector - the injector to use to get service instances, cannot be null
      • InjectorAwareServiceRegistrator

        public InjectorAwareServiceRegistrator​(org.osgi.framework.BundleContext context,
                                               Supplier<com.google.inject.Injector> injectorSupplier)
        Parameters:
        context - the bundle context to register service in, cannot be null
        injectorSupplier - the injector Supplier to use to get service instances in lazy-mode, cannot be null
    • Method Detail

      • service

        public <T> IInjectorAwareServiceRegistrationBuilder<T> service​(Class<T> serviceType)
        Register the service in OSGi service registry. Returns builder to provide implementation to register.

        Single instance of service will be registered regardless of injector binding scope and provider settings.

        Note that service registration of managed OSGi service is intended to be performed after service activating to export fully active service.

        Overrides:
        service in class ServiceRegistrator
        Parameters:
        serviceType - the service type to register in OSGi service registry, cannot be null
        Returns:
        a service registration builder, never null
      • unregisterServices

        public void unregisterServices()
        Unregister all previously registered services.

        Note that service unregistration of managed OSGi services is intended to be performed before services deactivating to unregister services before they become inactive.

        Overrides:
        unregisterServices in class ServiceRegistrator
      • activateManagedService

        public void activateManagedService​(Class<? extends IManagedService> serviceType)
        Activate the given managed service. Service instance will be supplied by the support injector.
        Parameters:
        service - the of managed service, cannot be null
        See Also:
        IManagedService
      • activateManagedServices

        public void activateManagedServices​(List<Class<? extends IManagedService>> managedServices)
        Activate the given managed services. Service instances will be supplied by the support injector.
        Parameters:
        managedServices - the list of managed service classes, cannot be null
        See Also:
        IManagedService