[
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