[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
| Re: [ecf-dev] Using a container multiple times | 
Hi Robert,
One other thought that might be useful...
On 11/5/2010 3:09 AM, Robert Onslow wrote:
Found the problem.
I was listening for a ContainerConnectedEvent to trigger a lookup of
the service on the IRemoteServiceContainerAdapter
The trouble was that the IRemoteServiceContainerAdapter of course
listens for a ContainerConnectedEvent before initialising with the
remote server.
So when if my handler was being handled first, then there was nothing
on the IRemoteServiceContainerAdapter to find yet.
Solved by using a IRemoteServiceListener on the IRemoteServiceContainerAdapter:
container = manager.getContainerFactory().createContainer("ecf.generic.client");
ID id = IDFactory.getDefault().createID(container.getConnectNamespace(),
uri.toString());
final IRemoteServiceContainerAdapter rsc =
(IRemoteServiceContainerAdapter) ((IAdaptable)
container).getAdapter(IRemoteServiceContainerAdapter.class);
rsc.addRemoteServiceListener(new IRemoteServiceListener() {
	@Override
	public void handleServiceEvent(IRemoteServiceEvent event) {
	String[] clazzes = event.getClazzes();
	boolean quit = false;
	for (int i = 0; quit = false&&  i<  clazzes.length; i++)
		quit = clazzes[i].equals(StateProvider.class.getName());
	if (quit){
	IRemoteServiceReference ref = event.getReference();
	StateProvider provider = (StateProvider) rsc.getRemoteService(ref);
	Map<String, Object>  state = provider.provideState();
	syncBundles(state);
												}
});
I'm not sure from your code whether this is completely appropriate or 
not, but another option might be to use the ECF RemoteServiceTracker.  
In effect, what it does is create/add an IRemoteService listener...and 
listen for IRemoteService events...and then turn around and call 
addingService, etc...which you can then respond to with your code.
In any event (so to speak :), RemoteServiceTracker is also available.  
One advantage is that it does all it's own cleanup/removing listener on 
RemoteServiceTracker.close().
Again, thanks.
Scott