[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[ecf-dev] ECF 3.11.0: new provider api
|
Hi Folks,
Over the past year, a lot of work has gone into the creation of new
remote services distribution providers...e.g.
1) Websockets using R-OSGi [1]
2) MQTT [2]
3) Hazelcast [3]
4) JaxRS based providers (Jersey) [4]
I expect that there will be consumer desires for using other
distribution providers, as this ability to create and use custom
distribution providers with standards-based remoting (OSGi remote
services) is very useful for integration.
I would like to make it easier for us and other to create new
distribution providers, so I decided to put in place a small new API to
make it easier for those that might wish to do so.
It's currently implemented as 3 new classes in a new package
'org.eclipse.ecf.remoteservices.provider' [5]. The notion is is that a
provider implementation can create an instance of
IRemoteServiceDistributionProvider and register this instance via the
OSGi whiteboard pattern...e.g.:
bundleContext.registerService(IRemoteServiceDistributionProvider.class,
myProviderImpl, null);
and the myProviderImpl will be used by ECF's RSA implementation at
export and/or import time.
I've created a RemoteServiceDistributionProvider class, so that the
myProviderImpl can use the now-common 'builder' pattern to create
myProviderImpl:
IRemoteServiceDistributionProvider myProviderImpl = new
RemoteServiceDistributionProvider.Builder().setName('com.mycorp.myprovider.client').setInstantiator(new
MyContainerInstantiator()).build();
The name 'com.mycorp.myprovider.client' and the
MyContainerInstantiator() are required and define the relationship
between the container/config type (e.g. 'ecf.generic.client') and the
IContainerInstantiator that's responsible for creating IContainer
instances associated with the container/config type. Below is a full
example for the Hazelcast provider. Note that using ds would also work
great.
The Builder also allows other customization (e.g. defining a new
Namespace), and flexibility it's currently possible for providers to
sub-class RemoteServiceDistributionProvider .
I would like to include this new API in 3.11.0, which I propose
releasing sometime in September. Since it's new API a minor release is
called for and requires a review.
If you have any comments, suggestions, or criticisms of this new API
let's discuss here on this list.
Thanks,
Scott
[1] https://github.com/ECF/Websockets
[2] https://github.com/ECF/Mqtt-Provider
[3] https://github.com/ECF/HazelcastProvider
[4] https://github.com/ECF/JaxRSProviders
[5]
http://git.eclipse.org/c/ecf/org.eclipse.ecf.git/tree/framework/bundles/org.eclipse.ecf.remoteservice/src/org/eclipse/ecf/remoteservice/provider
// Build and register hazelcast manager distribution provider
context.registerService(IRemoteServiceDistributionProvider.class,
new RemoteServiceDistributionProvider.Builder()
.setName(HazelcastManagerContainer.HAZELCAST_MANAGER_NAME)
.setInstantiator(new
HazelcastManagerContainer.Instantiator())
.setDescription("ECF Hazelcast
Manager").setServer(true)
.setAdapterConfig(new AdapterConfig(new
RemoteServiceContainerAdapterFactory(),
HazelcastManagerContainer.class))
.build(),
null);