[
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