| /* |
| * Copyright (c) OSGi Alliance (2012, 2014). 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.service.component; |
| |
| import org.osgi.annotation.versioning.ProviderType; |
| import org.osgi.framework.Constants; |
| import org.osgi.framework.ServiceObjects; |
| import org.osgi.framework.ServiceReference; |
| |
| /** |
| * Allows multiple service objects for a service to be obtained. |
| * |
| * <p> |
| * A component instance can receive a {@code ComponentServiceObjects} object via |
| * a reference that is typed {@code ComponentServiceObjects}. |
| * |
| * <p> |
| * For services with {@link Constants#SCOPE_PROTOTYPE prototype} scope, multiple |
| * service objects for the service can be obtained. For services with |
| * {@link Constants#SCOPE_SINGLETON singleton} or {@link Constants#SCOPE_BUNDLE |
| * bundle} scope, only one, use-counted service object is available. |
| * |
| * <p> |
| * Any unreleased service objects obtained from this |
| * {@code ComponentServiceObjects} object are automatically released by Service |
| * Component Runtime when the service becomes unbound. |
| * |
| * @param <S> Type of Service |
| * @ThreadSafe |
| * @since 1.3 |
| * @see ServiceObjects |
| * @author $Id: 49fc5e86384324c73b412d8b733f715f8b55d4d6 $ |
| */ |
| @ProviderType |
| public interface ComponentServiceObjects<S> { |
| /** |
| * Returns a service object for the {@link #getServiceReference() |
| * associated} service. |
| * |
| * <p> |
| * This method will always return {@code null} when the associated service |
| * has been become unbound. |
| * |
| * @return A service object for the associated service or {@code null} if |
| * the service is unbound, the customized service object returned by |
| * a {@code ServiceFactory} does not implement the classes under |
| * which it was registered or the {@code ServiceFactory} threw an |
| * exception. |
| * @throws IllegalStateException If the associated service has been become |
| * unbound. |
| * @see #ungetService(Object) |
| */ |
| public S getService(); |
| |
| /** |
| * Releases a service object for the {@link #getServiceReference() |
| * associated} service. |
| * |
| * <p> |
| * The specified service object must no longer be used and all references to |
| * it should be destroyed after calling this method. |
| * |
| * @param service A service object previously provided by this |
| * {@code ComponentServiceObjects} object. |
| * @throws IllegalStateException If the associated service has been become |
| * unbound. |
| * @throws IllegalArgumentException If the specified service object was not |
| * provided by this {@code ComponentServiceObjects} object. |
| * @see #getService() |
| */ |
| public void ungetService(S service); |
| |
| /** |
| * Returns the {@link ServiceReference} for the service associated with this |
| * {@code ComponentServiceObjects} object. |
| * |
| * @return The {@link ServiceReference} for the service associated with this |
| * {@code ComponentServiceObjects} object. |
| */ |
| public ServiceReference<S> getServiceReference(); |
| } |