| /******************************************************************************* |
| * Copyright (c) 2015 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.remoteservice.provider; |
| |
| import java.util.Dictionary; |
| import org.eclipse.ecf.core.ContainerTypeDescription; |
| import org.eclipse.ecf.core.identity.Namespace; |
| |
| /** |
| * Service interface for registering distribution providers. When IRemoteServiceDistributionProvider implementations |
| * are registered, they result in the two methods below being called by the org.eclipse.ecf.remoteservice bundle, |
| * with the BundleContext from the org.eclipse.ecf.remoteservice bundle. Intended to be implemented by remote |
| * service distribution provider implementations. When instance of this service interface is registered, the |
| * methods below will be called in order to register the ContainerTypeDescription, Namespace, and AdapterConfig |
| * for this distribution provider. |
| * <p> |
| * <b>Please NOTE</b>: IRemoteServiceDistributionProviders should be registered (and therefore the bundles containing implementations started) <b>before</b> |
| * any remote services using these distribution providers are exported. In other words, if you create and register |
| * a IRemoteServiceDistributionProvider with name 'com.myproject.myprovider' the provider implementation bundle should |
| * be started and the IRemoteServiceDistributionProvider service must be registered prior to registering the service |
| * that is to be exported using that provider. For example |
| * <p> |
| * <pre> |
| * #Must first register the com.myproject.myprovider distribution provider, so it's available |
| * providerBuilder.setName('com.myproject.myprovider')... |
| * bundleContext.registerService(IRemoteServiceDistributionProvider.class,providerBuilder.build(),null); |
| * |
| * ... |
| * |
| * #Then may register a remote service that uses com.myproject.myprovider distribution provider |
| * props.put("service.exported.interfaces","*"); |
| * |
| * #This specifies that com.myproject.myprovider is to be used to export the service, but the above registration |
| * #must take place before MyService registration so it can be active for exporting this service |
| * props.put("service.exported.configs","com.myproject.myprovider"); |
| * |
| * #With usual topology manager the following will export MyService using com.myproject.myprovider |
| * #distribution provider |
| * bundleContext.registerService(MyService.class,new MyServiceImpl(),props); |
| * </pre> |
| * @since 8.7 |
| */ |
| public interface IRemoteServiceDistributionProvider { |
| |
| /** |
| * Return the ContainerTypeDescription to register for this distribution provider. |
| * The returned ContainerTypeDescription must not be <code>null</code> and |
| * should be unique identified via it's name (obtained via {@link ContainerTypeDescription#getName()}. |
| * |
| * @return ContainerTypeDescription. Must not be <code>null</code>. |
| */ |
| ContainerTypeDescription getContainerTypeDescription(); |
| |
| /** |
| * Return any properties that are to be used when registering the ContainerTypeDescription |
| * returned by above method. <code>Null</code> may be returned. |
| * @return Dictionary to use when registering the ContainerTypeDescription |
| * May be <code>null</code>. |
| */ |
| Dictionary<String, ?> getContainerTypeDescriptionProperties(); |
| |
| /** |
| * Return the Namespace (or subclass) to register for this distribution provider. |
| * The returned Namespace may be <code>null</code>. In that case, no |
| * new Namespace will be registered. If the returned Namespace is non-null, |
| * It should be uniquely identified via it's name (obtained via {@link Namespace#getName()}. |
| * |
| * @return ContainerTypeDescription. May be <code>null</code>. |
| */ |
| Namespace getNamespace(); |
| |
| /** |
| * Return any properties that are to be used when registering the Namespace |
| * returned by above method. <code>Null</code> may be returned. |
| * @return Dictionary to use when registering this provider's Namespace. |
| * May be <code>null</code>. |
| */ |
| Dictionary<String, ?> getNamespaceProperties(); |
| |
| /** |
| * Return any AdapterConfigs to register with the IAdapterManager |
| * @return AdapterConfig[] holding any AdapterConfigs to be registered |
| * with the system-wide adaptermanager. |
| */ |
| AdapterConfig[] getAdapterConfigs(); |
| } |