[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| Re: [ecf-dev] Remote service with ActiveMQ JMS topic using RFC 119	transparent way. | 
Hi Roshan,
A couple of question inline below.
roshan joseph wrote:
Hi,
 I am trying to use the ECF remote services with RFC 119 for testing 
publish subscribe mechanism using ACtive MQ Topic.
 
I have a client which creates a ECF client container and publish a 
message to the Active MQ Topic and a subscriber service which listens 
on this topic to process this message. Both the client and service 
have ECF client containers(ecf.jms.activemq.tcp.client).
 
I start the activeMq JMS server application to act as the ECF server 
which connects to the ActiveMQ JMS broker. Though all looks fine from 
outside, but I don't see my client publishing the actual message to 
the topic.
How are you publishing your message to the topic?  ECF's JMS 
implementation(s) provides access to messaging via 'shared objects' and 
the ECF shared object API.  This is an api that allows named objects to 
send/receive messages on the JMS topic associated with the container.  
The container does multiplexing so there can be 0..many shared 
objects...all sharing/using the same underlying topic.
There is example code for shared objects in
path:  /cvsroot/rt
module:  org.eclipse.ecf/tests/bundles/org.eclipse.ecf.tests.sharedobject
See TestMessagingSharedObject in particular.
Now...one thing you should be aware of...I'm personally working on 
adding support for connection-oriented/publish-subscribe containers to 
the RFC119 implementation for Galileo...and it's not yet complete.  Let 
me explain about what this entails.
First, as part of the meta-data about a remote service, RFC119 specifies 
an 'endpoint' identifier...which basically specifies the 'host' of a 
remote service.  Consider the following architecture:
A  <-->  B <--> C
In this architecture, we have two clients 'A' and 'C' and a server 
'B'...all participating in the same publish and subscribe group.
Let's assume that A wants to make available a remote service S, and that 
C would like to use this service (S').  In RFC 119, A publishes (via the 
discovery mechanism) meta-data about S...including A's endpoint ID.  But 
if C receives A's endpoint ID, it is only useful for lookup and proxy 
creation if *C is already connected to B*.  That is, if C is not already 
connected to the group, then A's endpoint ID is (probably) not usable 
directly by C (i.e. in a JMS topic, for example, the client's endpoint 
ID is only usable for clients that are already connected to the group). 
So, for C to use A's service, there are two options: 
1) Connect C explicitly to B *before* C tries to do lookup of discovered 
services (S). 
2) Include in the meta-data about S information necessary for C to 
connect to *B* prior to doing the lookup of A's services.
To implement option 1, it's necessary to go out of RFC119...as RFC119 
doesn't address this architecture as it is now...and explicitly create 
an ECF IContainer instance, and connect it to B.  This is somewhat 
inconvenient, in that the application programmer (you) have to 
explicitly create an IContainer instance and call 
IContainer.connect(B)...perhaps at application startup time.
I am currently working on adding metadata to ECF's implementation of 
RFC119 discovery to support option 2.  Then it will be possible to have 
ECF's RFC119 implementation create an IContainer instance of the correct 
type, and then connect it to B prior to doing the service lookup...and 
have this all take place 'automatically' from the point of view of the 
client (that is, an S' service would just appear in C's service registry.
I am working on this mechanism (option 2) right now...i.e. this week, 
and expect to have it in place and tested by the end of this week.  Note 
that this mechanism will be general enough to deal properly with *all* 
connection-oriented ECF remote services providers...e.g. JMS, XMPP, 
Skype.  It will be necessary for client to define how they want to 
handle such discovered services via an IProxyContainerFinder (see this 
interface here): 
http://www.eclipse.org/ecf/org.eclipse.ecf.docs/api/org/eclipse/ecf/osgi/services/distribution/package-frame.html
This will allow clients of RFC119 discovery/distribution (i.e. you) to 
control the selection of the ECF remote service container to use for 
responding to remote service discovery from the RFC119 discovery mechanism.
Sorry about the long posting, but I'm working/thinking through this use 
case (publish and subscribe remote service providers) right now and I 
thought I would take an opportunity to record some of my thoughts in 
prose (and so that others can/could comment/review/critique, etc).
Scott