[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[ecf-dev] RemoteServices: first call to getRemoteServiceReferences return nothing

I have a problem of initialization with the getRemoteServiceReferences.
I am playing with Eclipse 3.3 and ECF 1.1.

Here are my plugins :

- Plugin1 :
   - start the server in a startup extension
       ID serverID = IDFactory.getDefault().createStringID("ecftcp://localhost:3282/server");
       Object[] args = new Object[] { serverID };
       server = ContainerFactory.getDefault().createContainer(" ecf.generic.server", args);
  - defines the IConcat interface (the interface of the service that will be published

- Plugin2 :
  - depends on Plugin1
  - publishes a service in an action extension
       IContainer clientOne = ContainerFactory.getDefault().createContainer("ecf.generic.client");
       ID serverID = IDFactory.getDefault().createStringID("ecftcp://localhost:3282/server");
       clientOne.connect(serverID, null);
       IRemoteServiceContainerAdapter remoteContainerOne = (IRemoteServiceContainerAdapter) clientOne.getAdapter(IRemoteServiceContainerAdapter.class);
       IRemoteServiceRegistration remoteServiceRegistration = remoteContainerOne.registerRemoteService(new String[] { IConcat.class.getName() }, new ConcatImpl(), null);

- Plugin3:
  - depends on Plugin1
  - in an action extension, look for the published service and call it
       IContainer clientTwo = ContainerFactory.getDefault().createContainer("ecf.generic.client");
       ID serverID = IDFactory.getDefault().createStringID("ecftcp://localhost:3282/server");
       clientTwo.connect(serverID, null);
       IRemoteServiceContainerAdapter remoteContainerTwo = (IRemoteServiceContainerAdapter) clientTwo.getAdapter(IRemoteServiceContainerAdapter.class);
       Thread.sleep (1000);
       IRemoteServiceReference[] refs = remoteContainerTwo.getRemoteServiceReferences(null, null, null);
       if (refs.length==0) {
           System.out.println("Service not found");
           return;
       }
       IRemoteService remoteService = remoteContainerTwo.getRemoteService(refs[0]);
       IConcat remoteConcat=(IConcat)remoteService.getPoxy();
       String result =  remoteConcat.concat("Eclipse "," is cool");
       System.out.println("TEST RESULT (asynch): " + result);

If I put these 3 plugins inside 1 Eclipse, everything works fine, I can publish and call the service.

But when I put in 1 Eclipse Plugin1 and 2 and in another Eclipse Plugin1 and 3 then
the first call to the service always returns "service not found", ie getRemoteServiceReferences returns an empty array.
Then following calls works fine.

As a workaround I have added inside Plugin1 startup extension the creation of an useless client :
           ID serverID = IDFactory.getDefault().createStringID("ecftcp://localhost:3282/server");
           IContainer client = ContainerFactory.getDefault().createContainer("ecf.generic.client");
           client.connect(serverID, null);
           IRemoteServiceContainerAdapter remoteContainerTwo = (IRemoteServiceContainerAdapter) client.getAdapter(IRemoteServiceContainerAdapter.class);
           IRemoteServiceReference[] refs = remoteContainerTwo.getRemoteServiceReferences(null, null, null);
           client.disconnect();

Is there something that I missed ? An "init" method ? Or is it a bug ?

Thanks for your help
Franck