Interface ServiceObjects<S>
-
- Type Parameters:
S
- Type of Service
@ProviderType public interface ServiceObjects<S>
Allows multiple service objects for a service to be obtained.For services with
prototype
scope, multiple service objects for the service can be obtained. For services withsingleton
orbundle
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 thisServiceObjects
object is stopped.- Since:
- 1.8
- Author:
- $Id: ServiceObjects.java 1614569 2014-07-30 07:22:32Z cziegeler $
- See Also:
BundleContext.getServiceObjects(ServiceReference)
,PrototypeServiceFactory
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description S
getService()
Returns a service object for theassociated
service.ServiceReference<S>
getServiceReference()
Returns theServiceReference
for the service associated with thisServiceObjects
object.void
ungetService(S service)
Releases a service object for theassociated
service.
-
-
-
Method Detail
-
getService
S getService()
Returns a service object for theassociated
service.This
ServiceObjects
object can be used to obtain multiple service objects for the associated service if the service hasprototype
scope.If the associated service has
singleton
orbundle
scope, 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 thisServiceObjects
object.This method will always return
null
when 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,
null
is 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
PrototypeServiceFactory
object isnull
, not aninstanceof
all the classes named when the service was registered or thePrototypeServiceFactory
object throws an exception,null
is returned and a Framework event of typeFrameworkEvent.ERROR
containing aServiceException
describing the error is fired. - The customized service object is returned.
- Returns:
- A service object for the associated service or
null
if the service is not registered, the customized service object returned by aServiceFactory
does not implement the classes under which it was registered or theServiceFactory
threw an exception. - Throws:
java.lang.IllegalStateException
- If the BundleContext used to create thisServiceObjects
object is no longer valid.- See Also:
ungetService(Object)
- If the associated service has been unregistered,
-
ungetService
void ungetService(S service)
Releases a service object for theassociated
service.This
ServiceObjects
object can be used to obtain multiple service objects for the associated service if the service hasprototype
scope. If the associated service hassingleton
orbundle
scope, 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 thisServiceObjects
object.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
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.
- Parameters:
service
- A service object previously provided by thisServiceObjects
object.- Throws:
java.lang.IllegalStateException
- If the BundleContext used to create thisServiceObjects
object is no longer valid.java.lang.IllegalArgumentException
- If the specified service object was not provided by thisServiceObjects
object.- See Also:
getService()
-
getServiceReference
ServiceReference<S> getServiceReference()
Returns theServiceReference
for the service associated with thisServiceObjects
object.- Returns:
- The
ServiceReference
for the service associated with thisServiceObjects
object.
-
-