blob: f7ecdf33d2c31c696ca5d78759dfa5b1a3e1f2ab [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010-2011 Composent, Inc. and others. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Composent, Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.osgi.services.remoteserviceadmin;
import java.util.Map;
import org.eclipse.ecf.remoteservice.IRemoteServiceContainer;
import org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter;
import org.osgi.framework.ServiceReference;
/**
* Host container selector service contract. When an ECF RemoteServiceAdmin
* instance is asked to import a service (i.e. via
* {@link RemoteServiceAdmin#exportService(ServiceReference, java.util.Map)} ),
* the RSA first gets an instance of this service via the service registry, and
* then uses it to select an array of ECF host container instances by calling
* {@link #selectHostContainers(ServiceReference, String[], String[], String[])}
* .
* <p>
* <p>
* The {@link IRemoteServiceContainer} array returned is then used to actually
* export the remote service (typically via
* {@link IRemoteServiceContainerAdapter#registerRemoteService(String[], Object, java.util.Dictionary)}
* <p>
* <p>
* If no other instances of this service have been registered, a default
* instance of {@link HostContainerSelector} will be used. Note that this
* default instance is registered with the lowest possible priority, so that if
* other {@link IHostContainerSelector} instances are registered, they will be
* preferred/used over the default.
*
*/
public interface IHostContainerSelector {
/**
*
* Select host containers to use to export a remote service.
*
* @param serviceReference
* the service reference given by the
* {@link RemoteServiceAdmin#exportService(ServiceReference, java.util.Map)}
* @param overridingProperties
* the map portion given by the
* {@link RemoteServiceAdmin#exportService(ServiceReference, java.util.Map)}
* @param exportedInterfaces
* the exportedInterfaces (typically associated with
* {@link org.osgi.service.remoteserviceadmin.RemoteConstants#SERVICE_EXPORTED_INTERFACES}
* ). Will not be <code>null</code>.
* @param exportedConfigs
* the exportedConfigs (typically associated with
* {@link org.osgi.service.remoteserviceadmin.RemoteConstants#SERVICE_EXPORTED_CONFIGS}
* ). May be <code>null</code>.
* @param serviceIntents
* the service intents (typically associated with
* {@link org.osgi.service.remoteserviceadmin.RemoteConstants#SERVICE_EXPORTED_INTENTS}
* and
* {@link org.osgi.service.remoteserviceadmin.RemoteConstants#SERVICE_EXPORTED_INTENTS_EXTRA}
* ). May be <code>null</code>.
* @return IRemoteServiceContainer[] of remote service containers that
* should be used to export the given remote service (typically via
* {@link IRemoteServiceContainerAdapter#registerRemoteService(String[], Object, java.util.Dictionary)}
* ). Will not be <code>null</code>, but may be empty array.
* @throws SelectContainerException
* thrown if the host container selection or
* creation/configuration fails.
* @since 2.0
*/
IRemoteServiceContainer[] selectHostContainers(
ServiceReference serviceReference,
Map<String, Object> overridingProperties,
String[] exportedInterfaces, String[] exportedConfigs,
String[] serviceIntents) throws SelectContainerException;
}