[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [ecf-dev] IContainerManager or OSGi service tracker?

Hi Remy,

Remy Chi Jian Suen wrote:
Are we supposed to be using IContainerManager to keep track of
created/connected IContainers or are we supposed to use
ServiceTracker?

I'm a little confused by your question. IContainerManager is published as an OSGi service, so you can get at it/use it via calls like:


ServiceReference ref = bundleContext.getServiceReference(IContainerManager.class.getName());
IContainerManager containerManager = (IContainerManager) bundleContext.getService(ref);


or you can use a ServiceTracker to get the IContainerManager service as well:

ServiceTracker serviceTracker = new ServiceTracker(bundleContext,IContainerManager.class.getName(),null);
serviceTracker.open();
IContainerManager containerManager = (IContainerManager) serviceTracker.getService();


I prefer and have been using ServiceTrackers for accessing the IContainerManager services and others, as they are much more helpful in doing appropriate cleanup, etc for the use of a service. I think ServiceTrackers are also considered cooler these days for OSGi service access as well :).

In general, though, 'yes' we should be using the IContainerManager service to keep track of IContainer instances (connected or not).

The current UI of having to manually attach listeners
for xmpp collaboration is rather crude. It'd be better if they were
just attached when an IContainer is created/connected.

Yes...it would probably be better to use the IContainerManager service to get the associated container and add listeners (either to the IContainerManager for synchronous notification upon container creation or to the relevant IContainer for synchronous notification upon container connect/disconnect). Then other listeners can be added/removed upon notification of the relevant events (IContainer creation or IContainer connection).


Scott