Interface ServiceObjects<S>
- Type Parameters:
S- Type of Service
For services with prototype scope, multiple
service objects for the service can be obtained. Since implementations of
PrototypeServiceFactory can return the same service object
repeatedly, the framework must use count the returned service objects to
release the service object only when its use count returns to zero.
For services with singleton or
bundle scope, only one, use-counted service
object is available to a requesting bundle.
Any unreleased service objects obtained from this ServiceObjects
object are automatically released by the framework when the bundle associated
with the BundleContext used to create this ServiceObjects object is
stopped.
- Since:
- 1.8
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionReturns a service object for theassociatedservice.Returns theServiceReferencefor the service associated with thisServiceObjectsobject.voidungetService(S service) Releases a service object for theassociatedservice.
-
Method Details
-
getService
S getService()Returns a service object for theassociatedservice.This
ServiceObjectsobject can be used to obtain multiple service objects for the associated service if the service hasprototypescope.If the associated service has
singletonorbundlescope, this method behaves the same as calling theBundleContext.getService(ServiceReference)method for the associated service. That is, only one, use-counted service object is available from thisServiceObjectsobject.This method will always return
nullwhen the associated service has been unregistered.For a prototype scope service, the following steps are required to obtain a service object:
- If the associated service has been unregistered,
nullis returned. - The
PrototypeServiceFactory.getService(Bundle, ServiceRegistration)method is called to supply a customized service object for the caller. - If the service object returned by the
PrototypeServiceFactoryobject isnull, not aninstanceofall the classes named when the service was registered or thePrototypeServiceFactoryobject throws an exception,nullis returned and a Framework event of typeFrameworkEvent.ERRORcontaining aServiceExceptiondescribing the error is fired. - The use count for the customized service object is incremented by one.
- The customized service object is returned.
- Returns:
- A service object for the associated service or
nullif the service is not registered, the customized service object returned by aServiceFactorydoes not implement the classes under which it was registered or theServiceFactorythrew an exception. - Throws:
IllegalStateException- If the BundleContext used to create thisServiceObjectsobject is no longer valid.- See Also:
- If the associated service has been unregistered,
-
ungetService
Releases a service object for theassociatedservice.This
ServiceObjectsobject can be used to obtain multiple service objects for the associated service if the service hasprototypescope. If the associated service hassingletonorbundlescope, this method behaves the same as calling theBundleContext.ungetService(ServiceReference)method for the associated service. That is, only one, use-counted service object is available from thisServiceObjectsobject.For a prototype scope service, the following steps are required to release a service object:
- If the associated service has been unregistered, this method returns without doing anything.
- The use count for the specified service object is decremented by one.
- If the use count for the specified service object is now zero, the
PrototypeServiceFactory.ungetService(Bundle, ServiceRegistration, Object)method is called to release the specified service object.
The specified service object must no longer be used and all references to it should be destroyed after calling this method when the use count has returned to zero.
- Parameters:
service- A service object previously provided by thisServiceObjectsobject.- Throws:
IllegalStateException- If the BundleContext used to create thisServiceObjectsobject is no longer valid.IllegalArgumentException- If the specified service object isnullor was not provided by aServiceObjectsobject for the associated service.- See Also:
-
getServiceReference
ServiceReference<S> getServiceReference()Returns theServiceReferencefor the service associated with thisServiceObjectsobject.- Returns:
- The
ServiceReferencefor the service associated with thisServiceObjectsobject.
-