Skip to main content

[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




Back to the top