Copyright (c) 2013 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2013 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.osgi.internal.serviceregistry;
Closure to allow sharing the same code for getting and ungetting a service. The prototypeConsumer closure must be used for calls from ServiceObjects and the singletonConsumer closure must be used for calls from BundleContext. The closure instance calls the correct method on the specified ServiceUse object for the current service consumer type.
/** * Closure to allow sharing the same code for getting and ungetting a service. * The {@link #prototypeConsumer} closure must be used for calls from * ServiceObjects and the {@link #singletonConsumer} closure must be used * for calls from BundleContext. * * The closure instance calls the correct method on the specified ServiceUse * object for the current service consumer type. */
public interface ServiceConsumer {
Used for calls from ServiceObjects.
/** * Used for calls from ServiceObjects. */
static ServiceConsumer prototypeConsumer = new ServiceConsumer() { @Override public <S> S getService(ServiceUse<S> use) { return use.newServiceObject(); } @Override public <S> boolean ungetService(ServiceUse<S> use, S service) { return use.releaseServiceObject(service); } };
Used for calls from BundleContext.
/** * Used for calls from BundleContext. */
static ServiceConsumer singletonConsumer = new ServiceConsumer() { @Override public <S> S getService(ServiceUse<S> use) { return use.getService(); } @Override public <S> boolean ungetService(ServiceUse<S> use, S service) { return use.ungetService(); } };
Get a service for the consumer.
Params:
  • use – Service Use object to get the service from.
Returns:The obtained service.
/** * Get a service for the consumer. * * @param use Service Use object to get the service from. * @return The obtained service. */
<S> S getService(ServiceUse<S> use);
Unget the service for the consumer.
Params:
  • use – Service Use object to unget the service from.
  • service – The Service to unget.
Returns:true if the service was ungotten, false otherwise.
/** * Unget the service for the consumer. * * @param use Service Use object to unget the service from. * @param service The Service to unget. * @return true if the service was ungotten, false otherwise. */
<S> boolean ungetService(ServiceUse<S> use, S service); }