[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| Re: [ecf-dev] ServiceTracker for remote services | 
Hi Eugen,
Eugen Reiswich wrote:
Hi all,
I'm using ECF over XMPP with an Jabber-Server. What I need is the 
functionallity similar to an OSGi ServiceTracker. Is there something 
comparable in ECF?
There is, but it's not yet thoroughly tested.  It's a 
'RemoteServiceTracker', in 
org.eclipse.ecf.remoteservice.util.tracker.RemoteServiceTracker.
When I start my application I need the ability:
1. to search for remote services already provided by my online clients
2. I also want to be informed about new service registrations if a new 
client logs in and offers his remote services
Can the ECF ServiceDiscovery-API be used to deal with this problem? 
Yes.
If yes, how would I use the ServiceDiscoveryAPI to create a 
ServiceTracker for ECF-remote-services? 
Well, the discovery API can deliver arbitrary service properties...and 
these service properties can include things like the targetID...that can 
be used to to create a proxy for a client that is discovered...e.g.
IRemoteServiceReference[] ref = 
containerAdapter.getRemoteServiceReferences(targetID,interface,null);
IRemoteService rs = containerAdapter.getRemoteService(ref[0]);
Object proxy = rs.getProxy();
But one thing to say about this:  what is being described here is 
basically what the ECF implementation of RFC119 does...that is, it gets 
meta-data about discovered services from the discovery service 
properties, and then calls 
containerAdapter.getRemoteServiceReferences(targetID,interface,props) 
for you...then creates a proxy and puts it in the local service registry 
(where a ServiceTracker for that service will then be notified).
You can see test code that tests this mechanism (the RFC119 impl) in the 
org.eclipse.ecf.tests.osgi.services.distribution test bundle.  In there 
are some test cases where a ServiceTracker is used so that client code 
can be notified when a remote service is discovered, lookedup, and then 
added to the local service registry (see 
org.eclipse.ecf.tests.osgi.services.distribution.AbstractServiceRegisterTest.testGetProxy 
for example).
Thanks,
Scott