Class BundleComponentActivator

java.lang.Object
org.apache.felix.scr.impl.BundleComponentActivator
All Implemented Interfaces:
ComponentActivator, ExtendedServiceListenerContext<ExtendedServiceEvent>

public class BundleComponentActivator extends Object implements ComponentActivator
The BundleComponentActivator is helper class to load and unload Components of a single bundle. It will read information from the metadata.xml file descriptors and create the corresponding managers.
  • Field Details

  • Constructor Details

    • BundleComponentActivator

      public BundleComponentActivator(ScrLogger scrLogger, ComponentRegistry componentRegistry, ComponentActorThread componentActor, org.osgi.framework.BundleContext context, ScrConfiguration configuration) throws org.osgi.service.component.ComponentException
      Called upon starting of the bundle. This method invokes initialize() which parses the metadata and creates the holders
      Parameters:
      componentRegistry - The ComponentRegistry used to register components with to ensure uniqueness of component names and to ensure configuration updates.
      context - The bundle context owning the components
      Throws:
      org.osgi.service.component.ComponentException - if any error occurrs initializing this class
  • Method Details

    • addServiceListener

      public void addServiceListener(String classNameFilter, org.osgi.framework.Filter eventFilter, ExtendedServiceListener<ExtendedServiceEvent> listener)
      Specified by:
      addServiceListener in interface ExtendedServiceListenerContext<ExtendedServiceEvent>
    • removeServiceListener

      public void removeServiceListener(String className, org.osgi.framework.Filter filter, ExtendedServiceListener<ExtendedServiceEvent> listener)
      Specified by:
      removeServiceListener in interface ExtendedServiceListenerContext<ExtendedServiceEvent>
    • initialize

      protected void initialize(String descriptorLocations)
      Gets the MetaData location, parses the meta data and requests the processing of binder instances
      Parameters:
      descriptorLocations - A comma separated list of locations of component descriptors. This must not be null.
      Throws:
      IllegalStateException - If the bundle has already been uninstalled.
    • initialEnable

      void initialEnable()
      Called outside the constructor so that the m_managers field is completely initialized. A component might possibly start a thread to enable other components, which could access m_managers
    • findDescriptors

      static URL[] findDescriptors(org.osgi.framework.Bundle bundle, String descriptorLocation)
      Finds component descriptors based on descriptor location.
      Parameters:
      bundle - bundle to search for descriptor files
      descriptorLocation - descriptor location
      Returns:
      array of descriptors or empty array if none found
    • loadDescriptor

      private void loadDescriptor(URL descriptorURL)
    • dispose

      void dispose(int reason)
      Dispose of this component activator instance and all the component managers.
    • isActive

      public boolean isActive()
      Returns if this instance is active, that is if components may be activated for this component. The active flag is set early in the constructor indicating the activator is basically active (not fully setup, though) and reset early in the process of disposing this instance.
      Specified by:
      isActive in interface ComponentActivator
    • getBundleContext

      public org.osgi.framework.BundleContext getBundleContext()
      Returns the BundleContext
      Specified by:
      getBundleContext in interface ComponentActivator
      Returns:
      the BundleContext
    • getConfiguration

      public ScrConfiguration getConfiguration()
      Specified by:
      getConfiguration in interface ComponentActivator
    • enableComponent

      public void enableComponent(String name)
      Implements the ComponentContext.enableComponent(String) method by first finding the component(s) for the name and enabling them. The enable method will schedule activation.

      Specified by:
      enableComponent in interface ComponentActivator
      Parameters:
      name - The name of the component to enable or null to enable all components.
    • disableComponent

      public void disableComponent(String name)
      Implements the ComponentContext.disableComponent(String) method by first finding the component(s) for the name and disabling them. The disable method will schedule deactivation

      Specified by:
      disableComponent in interface ComponentActivator
      Parameters:
      name - The name of the component to disable or null to disable all components.
    • getSelectedComponents

      private List<ComponentHolder<?>> getSelectedComponents(String name)
      Returns an array of ComponentHolder instances which match the name. If the name is null an array of all currently known component managers is returned. Otherwise an array containing a single component manager matching the name is returned if one is registered. Finally, if no component manager with the given name is registered, null is returned.
      Parameters:
      name - The name of the component manager to return or null to return an array of all component managers.
      Returns:
      An array containing one or more component managers according to the name parameter or null if no component manager with the given name is currently registered.
    • registerComponentId

      public long registerComponentId(AbstractComponentManager<?> componentManager)
      Specified by:
      registerComponentId in interface ComponentActivator
    • unregisterComponentId

      public void unregisterComponentId(AbstractComponentManager<?> componentManager)
      Specified by:
      unregisterComponentId in interface ComponentActivator
    • schedule

      public void schedule(Runnable task)
      Schedules the given task for asynchrounous execution or synchronously runs the task if the thread is not running. If this instance is not active, the task is not executed.
      Specified by:
      schedule in interface ComponentActivator
      Parameters:
      task - The component task to execute
    • getLogger

      public BundleLogger getLogger()
      Specified by:
      getLogger in interface ComponentActivator
    • enterCreate

      public <T> boolean enterCreate(org.osgi.framework.ServiceReference<T> serviceReference)
      Specified by:
      enterCreate in interface ComponentActivator
    • leaveCreate

      public <T> void leaveCreate(org.osgi.framework.ServiceReference<T> serviceReference)
      Specified by:
      leaveCreate in interface ComponentActivator
    • missingServicePresent

      public <T> void missingServicePresent(org.osgi.framework.ServiceReference<T> serviceReference)
      Specified by:
      missingServicePresent in interface ComponentActivator
    • registerMissingDependency

      public <S, T> void registerMissingDependency(DependencyManager<S,T> dependencyManager, org.osgi.framework.ServiceReference<T> serviceReference, int trackingCount)
      Specified by:
      registerMissingDependency in interface ComponentActivator
    • setRegionConfigurationSupport

      public RegionConfigurationSupport setRegionConfigurationSupport(org.osgi.framework.ServiceReference<org.osgi.service.cm.ConfigurationAdmin> reference)
      Specified by:
      setRegionConfigurationSupport in interface ComponentActivator
    • unsetRegionConfigurationSupport

      public void unsetRegionConfigurationSupport(RegionConfigurationSupport rcs)
      Specified by:
      unsetRegionConfigurationSupport in interface ComponentActivator
    • updateChangeCount

      public void updateChangeCount()
      Description copied from interface: ComponentActivator
      Inform about any change in the state of the components.
      Specified by:
      updateChangeCount in interface ComponentActivator