Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (c) OSGi Alliance (2000, 2008). All Rights Reserved.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package org.osgi.framework;

Allows services to provide customized service objects in the OSGi environment.

When registering a service, a ServiceFactory object can be used instead of a service object, so that the bundle developer can gain control of the specific service object granted to a bundle that is using the service.

When this happens, the BundleContext.getService(ServiceReference) method calls the ServiceFactory.getService method to create a service object specifically for the requesting bundle. The service object returned by the ServiceFactory is cached by the Framework until the bundle releases its use of the service.

When the bundle's use count for the service equals zero (including the bundle stopping or the service being unregistered), the ServiceFactory.ungetService method is called.

ServiceFactory objects are only used by the Framework and are not made available to other bundles in the OSGi environment. The Framework may concurrently call a ServiceFactory.

Version:
$Revision: 5967 $
See also:
BundleContext.getService(org.osgi.framework.ServiceReference)
ThreadSafe:
 
 
 public interface ServiceFactory {
Creates a new service object.

The Framework invokes this method the first time the specified bundle requests a service object using the BundleContext.getService(ServiceReference) method. The service factory can then return a specific service object for each bundle.

The Framework caches the value returned (unless it is null), and will return the same service object on any future call to BundleContext.getService for the same bundle. This means the Framework must not allow this method to be concurrently called for the same bundle.

The Framework will check if the returned service object is an instance of all the classes named when the service was registered. If not, then null is returned to the bundle.

Parameters:
bundle The bundle using the service.
registration The ServiceRegistration object for the service.
Returns:
A service object that must be an instance of all the classes named when the service was registered.
See also:
BundleContext.getService(org.osgi.framework.ServiceReference)
 
 	public Object getService(Bundle bundleServiceRegistration registration);

Releases a service object.

The Framework invokes this method when a service has been released by a bundle. The service object may then be destroyed.

Parameters:
bundle The bundle releasing the service.
registration The ServiceRegistration object for the service.
service The service object returned by a previous call to the ServiceFactory.getService method.
See also:
BundleContext.ungetService(org.osgi.framework.ServiceReference)
 
 	public void ungetService(Bundle bundleServiceRegistration registration,
 			Object service);
New to GrepCode? Check out our FAQ X