[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| [ecf-dev] continue to support RFC119 service properties? | 
Hi Folks,
I've begun the process of moving the ECF implementation of RFC119 over 
to using the new OSGi R4.2 draft remote services specification.  For 
reference and full discussion, this work will be tracked by this bug: 
https://bugs.eclipse.org/bugs/show_bug.cgi?id=290446
I need to start off this email by clarifying a few things:
In ~June 2009 (right around the time of the Eclipse/ECF Galileo release) 
the OSGi Enterprise Experts group chose to deeply restructure RFC 119 
(the distributed OSGi spec).  This caused a fair amount of frustration 
for me and others interested in providing spec-compliant implementations 
of remote services, as RFC 119 had been being worked on for fair amount 
of time (> 1 yr), and it seemed to me very late in the game to have an 
RFC be changed so deeply.   But the choice to change things was made by 
the the OSGi folks.
Now, rather than RFC119, there is a new section in the OSGi r4.2 
compendium draft called "Remote Services" (chapter 13).   Happily, this 
new specification is *very simple* as compared with RFC119, and includes 
*no java classes* in the spec at all.  So what does it specify?  Well, 
the remote services spec simply defines a small set of service 
properties that define what service hosts and service consumers use to 
signal to a distribution provider that it should expose a service for 
remote access.  The mechanism/java interfaces for doing this (i.e. the 
'discovery' and 'distribution' parts of RFC 119) are not specified in 
the remote services spec *at all*.  
For us and other implementers this simplicity is a good thing, as it 
simply specifies what the users of remote services need to do to have 
distribution providers to expose a remote service (host), and access a 
remote service (i.e. proxy).  I'm sure that getting to this simplicity 
of specification (i.e. just service properties) was/is the goal behind 
restructuring RFC119 so deeply...and I applaud the desire to make 
simplicity of the specification paramount.  I think the timing of such 
changes was terrible, however, coming so late in the development, 
review, and voting process for RFC119.
But in any event, ECF can/will easily support the new remote services 
specification (i.e. the service-properties-only spec), and I've begun 
this process with bug 290446 above.  Specifically, I've added the new 
service property names as specified in remote services/chap 13 to 
IDistributionConstants, ECF's distribution constants interface.  This is 
just the first step, but since ECF is already structured to separate API 
(remote services and discovery) from implementation/protocol (i.e. 
providers) it will not be technically difficult to accomplish.
There are some design considerations, however, that I would like to pose 
to people on this list...particularly those that are currently using the 
ECF RFC119 implementation from Galileo (and the recent 3.1.0 ECF release).
One choice we have is to
1) Continue to support RFC119 (i.e. by responding to the 
RFC119-specified service properties) and *add* the support for the 
remote services properties.
2) End/deprecate the support for RFC119 and *only* support the new 
remote services properties
Happily, with very little difficulty, ECF's distribution implementation 
(based upon ECF's abstract remote services API rather than any 
particular protocol) can continue to support RFC119 (i.e. 1).  OR we can 
end support for RFC119, and support only the new remote services 
properties. 
But, as always, there are some tradeoffs here.  Here are some downsides 
to these two strategies
If we do
1) Supporting both RFC119 and the new remote service properties will 
result in some additional complexity in our API.  For example, we 
currently have an interface called IHostContainerFinder that is 
responsible for finding/getting relevant ECF containers...i.e. those 
that meet the meta-data specified set of intents.  If we continue to 
support RFC119, we will have to *add* methods to this interface (to 
support the remote services spec meta-data service properties).  This 
will make this and a few other interfaces slightly more complex.  This 
interface doesn't *have* to be used by clients, however, and so this may 
not be a huge problem for people. 
If we do
2) All existing clients that use the existing ECF implementation of 
RFC119 will have to change the service properties that they use.  That 
is, if we *only* support the new remote services spec (and deprecate the 
RFC119-specified service properties), then clients will have to be 
changed to use the new service properties rather than the old 
ones...both for remote service registration (i.e. registerService), and 
for clients that have service property filters in their lookup (e.g. 
using ServiceTracker).
I'm interested in how people feel about this design choice.  Is it 
important to people to continue to use RFC119-specified service 
properties for service registration and lookup?  Having/supporting *one* 
set of remote service properties will ultimately be simpler for users 
(and for us), and even if we do support RFC119 we will likely deprecate 
all the old service properties and eventually remove them.
Ok, thanks for reading...and feel free to post thoughts/desires on bug 
https://bugs.eclipse.org/bugs/show_bug.cgi?id=290446 (preferred) or on 
this mailing list, or both.
Scott