[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| [ecf-dev] work on osgi remote services spec | 
Hi Folks,
This week I'm working on implementing the OSGi remote services spec 
(chap 13).  Here's the ECF bug that's tracking this work:  
https://bugs.eclipse.org/bugs/show_bug.cgi?id=290446
One of the things that the new remote services spec does differently 
than RFC119 is that it introduces the concept of a 'configuration type'. 
In the spec, distribution providers specify configuration type names 
(i.e. Strings), that they understand...and when remote services are 
registered (via bundleContext.registerService), the configuration types 
can be specified.  If the configuration types specified by the remote 
service being registered match those exposed by a given provider, then 
that provider will be created/configured...and will be given an 
opportunity to distribute the service.
Happily, this matches ECF's IContainer/provider architecture very 
well...that is...we already have the equivalent of a configuration type 
name...in essence it's the name of the ECF provider/container 
factory...which uniquely identifies the provider (e.g. 
"ecf.generic.client" or "ecf.r-osgi.peer").  This string can be used to 
lookup a ContainerTypeDescription (meta-information about an IContainer, 
along with the provider-implemented IContainerInstantiator...which is 
responsible for implementing the IContainer construction)...and then 
IContainer instances can be created...optionally using other service 
properties to specify the container construction parameters.
One nice side effect about this is that with our implementation of the 
remote services spec, we can/will allow containers that don't already 
exist (at service registration time) to be dynamically 
constructed/configured to support a given remote service registration.  
This will make it unnecessary to create IContainer instances prior to 
doing service registration (but can rather take place lazily as part of 
remote service registration itself).
But to support configuration types, I think it's going to be best to add 
a method like the following to the core 
org.eclipse.ecf.core.ContainerTypeDescription class
   public String[] getSupportedConfigTypes()
Adding this method will allow providers to specify at runtime the config 
types that they support.
I've added this method and made the necessary additions to the ECF core 
code and the providers in my local workspace, but have not checked it in 
yet because there is a complication caused by the way that we provide 
the ECF core and filetransfer bundles to Eclipse.  Since we deploy our 
core bundles via Eclipse (for p2) and *do not* deploy these bundles as 
part of the ECF sdk, any use of this new code will need new versions of 
the ECF core bundles...and the existing Eclipse doesn't have this new 
ECF core code...so won't compile unless the latest ECF core bundles are 
present.  We'll see this first in our automated build...but everyone 
that has the ECF sdk source in their workspace will also need the 
org.eclipse.ecf core bundle to prevent from getting compile errors.
After I commit the addition, the fix for ECF committers and contributors 
(i.e. anyone that is working with the source code), is to simply load 
the latest org.eclipse.ecf project contents into the workspace.
After the addition is made, and our own build can build it properly (and 
I'll figure out with Ted and Markus how to get this going), then I will 
submit the new ECF core code to next week's platform/p2 integration 
build, and then if people wish they can get the 3.6 Eclipse integration 
build (with the new ECF core code) rather than have the new 
org.eclipse.ecf code in their workspace.
I won't commit the addition until Ted, Markus, and I figure out how to 
adjust our own build to not be broken by the addition, and will then 
make another announcement before commiting the changes to head.  Please 
ask any questions or make any comments on the bug
https://bugs.eclipse.org/bugs/show_bug.cgi?id=290446
Thanks,
Scott