Class ServiceRegistrationImpl

    • Field Detail

      • m_bundle

        private final Bundle m_bundle
      • m_classes

        private final java.lang.String[] m_classes
      • m_serviceId

        private final java.lang.Long m_serviceId
      • m_svcObj

        private volatile java.lang.Object m_svcObj
      • m_propMap

        private volatile java.util.Map<java.lang.String,​java.lang.Object> m_propMap
      • m_isUnregistering

        private volatile boolean m_isUnregistering
      • m_threadLoopDetection

        private final java.lang.ThreadLocal<java.lang.Boolean> m_threadLoopDetection
      • syncObject

        private final java.lang.Object syncObject
    • Constructor Detail

      • ServiceRegistrationImpl

        public ServiceRegistrationImpl​(ServiceRegistry registry,
                                       Bundle bundle,
                                       java.lang.String[] classes,
                                       java.lang.Long serviceId,
                                       java.lang.Object svcObj,
                                       java.util.Dictionary dict)
    • Method Detail

      • isValid

        protected boolean isValid()
      • invalidate

        protected void invalidate()
      • getReference

        public ServiceReference getReference()
        Description copied from interface: ServiceRegistration
        Returns a ServiceReference object for a service being registered.

        The ServiceReference object may be shared with other bundles.

        Specified by:
        getReference in interface ServiceRegistration
        Returns:
        ServiceReference object.
      • setProperties

        public void setProperties​(java.util.Dictionary dict)
        Description copied from interface: ServiceRegistration
        Updates the properties associated with a service.

        The Constants.OBJECTCLASS, Constants.SERVICE_BUNDLEID, Constants.SERVICE_ID and Constants.SERVICE_SCOPE keys cannot be modified by this method. These values are set by the Framework when the service is registered in the OSGi environment.

        The following steps are required to modify service properties:

        1. The service's properties are replaced with the provided properties.
        2. A service event of type ServiceEvent.MODIFIED is fired.
        Specified by:
        setProperties in interface ServiceRegistration
        Parameters:
        dict - The properties for this service. See Constants for a list of standard service property keys. Changes should not be made to this object after calling this method. To update the service's properties this method should be called again.
      • unregister

        public void unregister()
        Description copied from interface: ServiceRegistration
        Unregisters a service. Remove a ServiceRegistration object from the Framework service registry. All ServiceReference objects associated with this ServiceRegistration object can no longer be used to interact with the service once unregistration is complete.

        The following steps are required to unregister a service:

        1. The service is removed from the Framework service registry so that it can no longer be obtained.
        2. A service event of type ServiceEvent.UNREGISTERING is fired so that bundles using this service can release their use of the service. Once delivery of the service event is complete, the ServiceReference objects for the service may no longer be used to get a service object for the service.
        3. For each bundle whose use count for this service is greater than zero:
          • The bundle's use count for this service is set to zero.
          • If the service was registered with a ServiceFactory object, the ServiceFactory.ungetService method is called to release the service object for the bundle.
        Specified by:
        unregister in interface ServiceRegistration
        See Also:
        BundleContext.ungetService(ServiceReference), ServiceFactory.ungetService(Bundle, ServiceRegistration, Object)
      • isClassAccessible

        private boolean isClassAccessible​(java.lang.Class clazz)
        This method determines if the class loader of the service object has access to the specified class.
        Parameters:
        clazz - the class to test for reachability.
        Returns:
        true if the specified class is reachable from the service object's class loader, false otherwise.
      • getProperty

        java.lang.Object getProperty​(java.lang.String key)
      • getPropertyKeys

        private java.lang.String[] getPropertyKeys()
      • getUsingBundles

        private Bundle[] getUsingBundles()
      • getService

        java.lang.Object getService()
        This method provides direct access to the associated service object; it generally should not be used by anyone other than the service registry itself.
        Returns:
        The service object associated with the registration.
      • getService

        java.lang.Object getService​(Bundle acqBundle)
      • ungetService

        void ungetService​(Bundle relBundle,
                          java.lang.Object svcObj)
      • initializeProperties

        private void initializeProperties​(java.util.Dictionary<java.lang.String,​java.lang.Object> dict)
      • getFactoryUnchecked

        private java.lang.Object getFactoryUnchecked​(Bundle bundle)
      • ungetFactoryUnchecked

        private void ungetFactoryUnchecked​(Bundle bundle,
                                           java.lang.Object svcObj)
      • currentThreadMarked

        boolean currentThreadMarked()
      • markCurrentThread

        void markCurrentThread()
      • unmarkCurrentThread

        void unmarkCurrentThread()