/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.felix.ipojo; import java.util.Dictionary; import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceListener; import org.osgi.framework.ServiceReference; import org.osgi.framework.ServiceRegistration; /** * A service context is the facade of a service registry. * It gives the access to a service broker. All service * interactions should use a service context to garanty * the service isolation. * This class is a subset of {@link BundleContext} methods. * (methods implying interactions with the service registry). * So, refer to this class for further information. * @see BundleContext * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a> */ public interface ServiceContext extends BundleContext { /** * Adds a service listener. * The listener is added to this service context. * So only services from this context will be tracked. * @param listener the service listener to add. * @param filter the LDAP filter * @throws InvalidSyntaxException if the LDAP filter is malformed * @see org.osgi.framework.BundleContext#addServiceListener(org.osgi.framework.ServiceListener, java.lang.String) */ void addServiceListener(ServiceListener listener, String filter) throws InvalidSyntaxException; /** * Adds a service listener. * The listener is added to this service context. * So only services from this context will be tracked. * @param listener the service listener to add. * @see org.osgi.framework.BundleContext#addServiceListener(org.osgi.framework.ServiceListener) */ void addServiceListener(ServiceListener listener); /** * Gets the service references matching with the given query. * The query is executed inside this service context. * @param clazz the required interface * @param filter a LDAP filter * @return the array of available service references or <code>null</code> * if no providers are available. * @throws InvalidSyntaxException if the LDAP filter is malformed * @see org.osgi.framework.BundleContext#getAllServiceReferences(java.lang.String, java.lang.String) */ ServiceReference[] getAllServiceReferences(String clazz, String filter) throws InvalidSyntaxException; /** * Gets a service object. * The given service reference must comes from this * service context. * @param reference the required service reference * @return the service object or null if the service reference is no more valid or if the service object is not accessible * @see org.osgi.framework.BundleContext#getService(org.osgi.framework.ServiceReference) */ <S> S getService(ServiceReference<S> reference); /** * Gets a service reference for the given interface. * The query is executed inside this service context. * @param clazz the required interface name * @return a service reference on a available provider or * <code>null</code> if no providers are available * @see org.osgi.framework.BundleContext#getServiceReference(java.lang.String) */ ServiceReference getServiceReference(String clazz); /** * Gets service reference list for the given query. * The query is executed inside this service context. * @param clazz : the name of the required service interface * @param filter : LDAP filter to apply on service provider * @return : the array of consistent service reference or <code>null</code> * if no available providers * @throws InvalidSyntaxException if the LDAP filter is malformed * @see org.osgi.framework.BundleContext#getServiceReferences(java.lang.String, java.lang.String) */ ServiceReference[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException; /** * Registers a service inside this service context. * This service is then isolated inside this context. * @param clazzes the interfaces provided by the service. * @param service the service object. * @param properties service properties to publish * @return the service registration for this service publication. * This service registration is attached to the current service context, * and does not have any meaning in other contexts. * @see org.apache.felix.ipojo.ServiceContext#registerService(java.lang.String[], java.lang.Object, java.util.Dictionary) */ ServiceRegistration registerService(String[] clazzes, Object service, Dictionary<String, ?> properties); /** * Registers a service inside this service context. * This service is then isolated inside this context. * @param clazz the interface provided by the service. * @param service the service object. * @param properties service properties to publish. * @return the service registration for this service publication. * This service registration is attached to the current service context, * and does not have any meaning in other contexts. * @see org.osgi.framework.BundleContext#registerService(java.lang.String, java.lang.Object, java.util.Dictionary) */ ServiceRegistration registerService(String clazz, Object service, Dictionary<String, ?> properties); /** * Removes a service listener. * The listener must be registered inside this service context. * @param listener the listener to remove * @see org.osgi.framework.BundleContext#removeServiceListener(org.osgi.framework.ServiceListener) */ void removeServiceListener(ServiceListener listener); /** * Ungets the service reference. * The service reference must comes from this service context. * @param reference the reference to unget * @return <code>true</code> if you are the last user of the reference. * @see org.osgi.framework.BundleContext#ungetService(org.osgi.framework.ServiceReference) */ boolean ungetService(ServiceReference<?> reference); }