[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[ecf-dev] ContainerDisconnectedEvent while sending Request
|
Hi all,
I’m
currently working on an application using ECF remoteservice with ecf.generic
and declarative services. For our data models we use EMF. On the server side
everything works fine (using declarative services) – the container is
configured by using the containerfactoryargs property.
As EMF
models are not serializable out of the box, I created an interface derived from
java.io.Externalizable and implemented the methods the following way:
public void writeExternal(ObjectOutput out) throws
IOException
{
Resource res = new XMIResourceImpl();
res.getContents().add(EcoreUtil.copy(this));
ByteArrayOutputStream
bos = new ByteArrayOutputStream();
res.save(bos, null);
bos.close();
out.writeObject(bos.toByteArray());
}
public void readExternal(ObjectInput in) throws
IOException, ClassNotFoundException
{
byte[] array = (byte[]) in.readObject();
ByteArrayInputStream bis = new
ByteArrayInputStream(array);
Resource res = new XMIResourceImpl();
res.load(bis, null);
EList<EObject> contents = res.getContents();
if (contents.size() > 0)
{
INSTANCE = (SerializableEObject) contents.get(0);
}
}
public Object readResolve() throws ObjectStreamException
{
SerializableEObject tmpEObj = INSTANCE;
INSTANCE = null;
return tmpEObj;
}
In a unit
test serialization and deserialization works fine.
Now my
problem:
If I call a
method that doesn’t have an EMF object as parameter, everything works fine. If
I call a method with an EMF object, I immediately get a
ContainerDisconnectedEvent after the Response has been sent from the server to
the client. The client doesn’t seem to receive anything and I get a timeout.
Traces on
client side:
(TRACE)[09/28/10;11:16:06:232]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#callSynch([RemoteServiceRegistrationImpl[remoteServiceID=org.eclipse.ecf.remoteservice.RemoteServiceID[containerID=StringID[ecftcp://localhost:30001/server];containerRelativeID=2];containerID=StringID[ecftcp://localhost:30001/server];serviceid=2;serviceranking=0;classes=[…];state=0;properties={component.id=3,
ecf.rsvc.id=2,component.name=…}], org.eclipse.ecf.remoteservice.AbstractRemoteService$2@1d1695e])
(TRACE)[09/28/10;11:16:06:233]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#sendCallRequest([RemoteServiceRegistrationImpl[remoteServiceID=org.eclipse.ecf.remoteservice.RemoteServiceID[containerID=StringID[ecftcp://localhost:30001/server];containerRelativeID=2];containerID=StringID[ecftcp://localhost:30001/server];serviceid=2;serviceranking=0;classes=[…];state=0;properties={component.id=3,
ecf.rsvc.id=2, component.name=…}], org.eclipse.ecf.remoteservice.AbstractRemoteService$2@1d1695e])
(TRACE)[09/28/10;11:16:06:236]EXITING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#sendCallRequest(Request[requestId=1;cont=StringID[qDS+EAbBjVJzw+SLWJRlntn869I=];serviceId=2;call=RemoteCallImpl[class=…;method=readElement;params=[…];timeout=30000];done=false;response=null;listener=null])
(TRACE)[09/28/10;11:16:06:236]callSync request sent with requestid=1
(TRACE)[09/28/10;11:16:06:236]Waiting 5000 for response to request: 1
(TRACE)[09/28/10;11:16:07:720]ENTERING org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#handleContainerDisconnectedEvent(ContainerDisconnectedEvent[StringID[qDS+EAbBjVJzw+SLWJRlntn869I=];]StringID[ecftcp://localhost:30001/server];)
(TRACE)[09/28/10;11:16:07:720]TRACING org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[qDS+EAbBjVJzw+SLWJRlntn869I=].removePendingContainers(removed
containerID=StringID[ecftcp://localhost:30001/server],pendingUpdateContainer={})
(TRACE)[09/28/10;11:16:07:726]EXITING org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#handleContainerDisconnectedEvent
(TRACE)[09/28/10;11:16:11:236]Waiting 5000 for response to request: 1
(TRACE)[09/28/10;11:16:16:237]Waiting 5000 for response to request: 1
(TRACE)[09/28/10;11:16:21:237]Waiting 5000 for response to request: 1
(TRACE)[09/28/10;11:16:26:238]Waiting 5000 for response to request: 1
(TRACE)[09/28/10;11:16:31:238]Waiting 5000 for response to request: 1
org.osgi.framework.ServiceException: Service exception on remote service proxy
rsid=org.eclipse.ecf.remoteservice.RemoteServiceID[containerID=StringID[ecftcp://localhost:30001/server];containerRelativeID=2]
at
org.eclipse.ecf.remoteservice.AbstractRemoteService.invoke(AbstractRemoteService.java:185)
at $Proxy0.readElement(Unknown Source)
…
at java.lang.Thread.run(Thread.java:619)
Caused by: org.eclipse.ecf.core.util.ECFException: Request timed out after 30000ms
at
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject.callSynch(RegistrySharedObject.java:629)
at
org.eclipse.ecf.provider.remoteservice.generic.RemoteServiceImpl.callSync(RemoteServiceImpl.java:55)
at
org.eclipse.ecf.remoteservice.AbstractRemoteService.invokeSync(AbstractRemoteService.java:148)
at
org.eclipse.ecf.remoteservice.AbstractRemoteService.invoke(AbstractRemoteService.java:180)
... 3 more
Caused by: org.eclipse.equinox.concurrent.future.TimeoutException
... 7 more
Traces on
server side:
(TRACE)[09/28/10;11:16:06:238]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter].p.handleEvent()
(TRACE)[09/28/10;11:16:06:239]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter].p.handleSharedObjectMsgEvent()
(TRACE)[09/28/10;11:16:06:239]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter].p.getSharedObjectMsgFromEvent()
(TRACE)[09/28/10;11:16:06:239]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter].p.getSharedObjectMsgFromEvent()
(TRACE)[09/28/10;11:16:06:240]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#handleCallRequest(Request[requestId=1;cont=StringID[qDS+EAbBjVJzw+SLWJRlntn869I=];serviceId=2;call=RemoteCallImpl[class=…;method=readElement;params=[…];timeout=30000];done=false;response=null;listener=null])
(TRACE)[09/28/10;11:16:06:240]EXITING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#handleCallRequest
(TRACE)[09/28/10;11:16:06:240]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter].p.handleSharedObjectMsgEvent()
(TRACE)[09/28/10;11:16:06:240]ENTERING org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter].p.handleEvent()
(TRACE)[09/28/10;11:16:07:625]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#sendCallResponse([StringID[qDS+EAbBjVJzw+SLWJRlntn869I=],
Response[requestId=1;response=…);exception=null]])
(TRACE)[09/28/10;11:16:07:625]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter].p.sendSharedObjectMsgTo()
(TRACE)[09/28/10;11:16:07:677]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter].p.sendSharedObjectMsgTo()
(TRACE)[09/28/10;11:16:07:677]EXITING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#sendCallResponse
(TRACE)[09/28/10;11:16:07:715]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter].p.handleEvent()
(TRACE)[09/28/10;11:16:07:715]ENTERING org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#handleContainerDisconnectedEvent(ContainerDisconnectedEvent[StringID[ecftcp://localhost:30001/server];]StringID[qDS+EAbBjVJzw+SLWJRlntn869I=];)
(TRACE)[09/28/10;11:16:07:716]TRACING org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[ecftcp://localhost:30001/server].removePendingContainers(removed
containerID=StringID[qDS+EAbBjVJzw+SLWJRlntn869I=],pendingUpdateContainer={})
(TRACE)[09/28/10;11:16:07:716]EXITING org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#handleContainerDisconnectedEvent
(TRACE)[09/28/10;11:16:07:716]ENTERING
org.eclipse.ecf.provider.remoteservice.generic.RegistrySharedObject#StringID[org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter].p.handleEvent()
Anyone, any
ideas???
BTW: If I
switch to ecf.r_osgi.peer, I get a java.lang.LinkageError for one of my
classes. If I switch to ecf.generic – this error does not come up and the
method is called without any problems ;-(
BR,
Walter