Discussion:
EJBException et RMI
Nicolas Delsaux
2011-11-03 13:52:40 UTC
Permalink
Salut,
depuis ce matin, je me chamaille avec un test unitaire Glassfish
client qui m'affiche des erreurs RMI/IIOP/CORBA complètement dingues.
Après moult ivnestigations, j'en suis venu à la conclusion qu'une
exception arrive sur le serveur, et que cette exception ne passe pas
dans les tuyaux de RMI.
Maintenant, comment je peux corriger ?
Bon, je vais quand même vous donner plus de détails.
Depuis un client Glassfish, je récupère l'interface distante d'un EJB
qui stocke des données dans une base Neo4J en utilisant Empire-RDF
(https://github.com/mhgrove/Empire). Pas forcément conventionnel, mais
sacrément fonctionnel.
Sauf que, dans certains cas, je fais des bêtises (genre créer un objet
qui existe déja en base).
Dans ce cas-là, côté serveur, je vois ça :

[#|2011-11-03T14:28:33.463+0100|WARNING|glassfish3.1.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=223;_ThreadName=Thread-2;|A
system exception occurred during an invocation on EJB TemplateEJB
method public java.lang.Object
AbstractCrudService.create(java.lang.Object)
javax.ejb.EJBException
at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5193)
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5091)
at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4879)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:213)
at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:79)
at $Proxy531.create(Unknown Source)
at sun.reflect.GeneratedMethodAccessor190.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:144)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:528)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:199)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:990)
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:742)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
Caused by: javax.persistence.EntityExistsException:
java.lang.IllegalArgumentException: Entity already exists: Template
id=RemoteTemplateJPATest#a template with an empty target
name=a template with an empty target

at com.clarkparsia.empire.impl.EntityManagerImpl.persist(Unknown Source)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:269)
at AbstractCrudService.create(AbstractCrudService.java:70)
at AbstractCrudService.create(AbstractCrudService.java:22)
at sun.reflect.GeneratedMethodAccessor187.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5366)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:57)
at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
at sun.reflect.GeneratedMethodAccessor162.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5338)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5326)
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:206)
... 18 more
Caused by: java.lang.IllegalArgumentException: Entity already exists: Template
id=RemoteTemplateJPATest#a template with an empty target
name=a template with an empty target

at com.clarkparsia.empire.impl.EntityManagerImpl.assertNotContains(Unknown
Source)
... 49 more
|#]


Le message est assez clair : "Entity already exists".
Par contre, côté client, je reçois une exception tout sauf limpide :

Avertissement: IOP00810011: Exception from readValue on ValueHandler
in CDRInputStream
org.omg.CORBA.MARSHAL: Avertissement: IOP00810011: Exception from
readValue on ValueHandler in CDRInputStream vmcid: OMG minor code:
11 completed: Maybe
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248)
at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511)
at com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99)
at $Proxy54.valuehandlerReadException(Unknown Source)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1022)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123)
at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531)
at com.sun.corba.ee.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:2162)
at com.sun.corba.ee.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2404)
at com.sun.corba.ee.impl.io.IIOPInputStream.defaultReadObjectDelegate(IIOPInputStream.java:596)
at com.sun.corba.ee.impl.io.InputStreamHook.defaultReadObject(InputStreamHook.java:233)
at java.lang.Throwable.readObject(Throwable.java:913)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.corba.ee.impl.io.IIOPInputStream.invokeObjectReader(IIOPInputStream.java:1832)
at com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1214)
at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:425)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:308)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123)
at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531)
at com.sun.corba.ee.impl.presentation.rmi.ExceptionHandlerImpl$ExceptionRWRMIImpl.read(ExceptionHandlerImpl.java:180)
at com.sun.corba.ee.impl.presentation.rmi.ExceptionHandlerImpl.readException(ExceptionHandlerImpl.java:290)
at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readException(DynamicMethodMarshallerImpl.java:502)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:205)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:227)
at __TemplateEJBInterface_Remote_DynamicStub.create(__TemplateEJBInterface_Remote_DynamicStub.java)
at _TemplateEJBInterface_Wrapper.create(_TemplateEJBInterface_Wrapper.java)
at RemoteTemplateJPATest.aTemplateWithASimpleTargetShouldTotallyWork(RemoteTemplateJPATest.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.io.IOException: Mismatched serialization UIDs : Source
(Rep. IDRMI:javax.ejb.EJBException:958C33FAE8798D83:E573C8C3FC5EB5E2)
= E573C8C3FC5EB5E2 whereas Target (Rep. ID
RMI:javax.ejb.EJBException:958C33FAE8798D83:0B0EB2FF36CB22F6) =
0B0EB2FF36CB22F6
at com.sun.corba.ee.impl.util.RepositoryId.useFullValueDescription(RepositoryId.java:679)
at com.sun.corba.ee.impl.util.RepositoryId.useFullValueDescription(RepositoryId.java:639)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.useFullValueDescription(ValueHandlerImpl.java:360)
at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:422)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:308)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015)
... 52 more

D'après ce que je comprend du bazar, ça devrait vouloir dire qu'un des
éléments renvoyés n'est pas sérialisable.
Ca n'est pas le cas de mon objet, que j'envoie déja à travers RMI (et
qui est donc sérialisé).
Ca n'est - à priori - pas le cas des exceptions, piuisque Throwable
implémente Serializable.
Alors que reste-t-il de non sérialisable ?
Au cas où vous poseriez la question, le client s'exécute sur un JDK
1.7.0, comme Glassfish d'ailleurs (vérifié avec JVisualVM). Il ne
s'agit donc pas du classique problème de version différente.
--
Nicolas Delsaux
Dominique Gallot
2011-11-03 14:18:50 UTC
Permalink
Ton exception est serialisable, mais celle-ci de defini pas de UID, ou
qu'un de ces champs à le meme probleme.

Donc celui-ci est caluler automatiquement, et cela la valuer depends de la
version de java.
C'est pour ca qu'eclipse rale quant une classe implemente serialisable mais
ne definit pas le champs
private static final long serialVersionUID = xxxx;
http://c2.com/ppr/wiki/JavaIdioms/AlwaysDeclareSerialVersionUid.html

Dominique
Post by Nicolas Delsaux
Salut,
depuis ce matin, je me chamaille avec un test unitaire Glassfish
client qui m'affiche des erreurs RMI/IIOP/CORBA complètement dingues.
Après moult ivnestigations, j'en suis venu à la conclusion qu'une
exception arrive sur le serveur, et que cette exception ne passe pas
dans les tuyaux de RMI.
Maintenant, comment je peux corriger ?
Bon, je vais quand même vous donner plus de détails.
Depuis un client Glassfish, je récupère l'interface distante d'un EJB
qui stocke des données dans une base Neo4J en utilisant Empire-RDF
(https://github.com/mhgrove/Empire). Pas forcément conventionnel, mais
sacrément fonctionnel.
Sauf que, dans certains cas, je fais des bêtises (genre créer un objet
qui existe déja en base).
[#|2011-11-03T14:28:33.463+0100|WARNING|glassfish3.1.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=223;_ThreadName=Thread-2;|A
system exception occurred during an invocation on EJB TemplateEJB
method public java.lang.Object
AbstractCrudService.create(java.lang.Object)
javax.ejb.EJBException
at
com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5193)
at
com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5091)
at
com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4879)
at
com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)
at
com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)
at
com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:213)
at
com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:79)
at $Proxy531.create(Unknown Source)
at sun.reflect.GeneratedMethodAccessor190.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at
com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:144)
at
com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174)
at
com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:528)
at
com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:199)
at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)
at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)
at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:990)
at
com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)
at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:742)
at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539)
at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324)
at
com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
at
com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
java.lang.IllegalArgumentException: Entity already exists: Template
id=RemoteTemplateJPATest#a template with an empty target
name=a template with an empty target
at com.clarkparsia.empire.impl.EntityManagerImpl.persist(Unknown Source)
at
com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:269)
at AbstractCrudService.create(AbstractCrudService.java:70)
at AbstractCrudService.create(AbstractCrudService.java:22)
at sun.reflect.GeneratedMethodAccessor187.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at
org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
at
org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
at
com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5366)
at
com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
at
com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
at
org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:57)
at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at
com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
at
com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
at
com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
at
com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
at sun.reflect.GeneratedMethodAccessor162.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at
com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
at
com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at
com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
at
com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5338)
at
com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5326)
at
com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:206)
... 18 more
Caused by: java.lang.IllegalArgumentException: Entity already exists: Template
id=RemoteTemplateJPATest#a template with an empty target
name=a template with an empty target
at
com.clarkparsia.empire.impl.EntityManagerImpl.assertNotContains(Unknown
Source)
... 49 more
|#]
Le message est assez clair : "Entity already exists".
Avertissement: IOP00810011: Exception from readValue on ValueHandler
in CDRInputStream
org.omg.CORBA.MARSHAL: Avertissement: IOP00810011: Exception from
11 completed: Maybe
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at
com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248)
at
com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95)
at
com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387)
at
com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107)
at
com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511)
at
com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99)
at $Proxy54.valuehandlerReadException(Unknown Source)
at
com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1022)
at
com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123)
at
com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531)
at
com.sun.corba.ee.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:2162)
at
com.sun.corba.ee.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2404)
at
com.sun.corba.ee.impl.io.IIOPInputStream.defaultReadObjectDelegate(IIOPInputStream.java:596)
at
com.sun.corba.ee.impl.io.InputStreamHook.defaultReadObject(InputStreamHook.java:233)
at java.lang.Throwable.readObject(Throwable.java:913)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at
com.sun.corba.ee.impl.io.IIOPInputStream.invokeObjectReader(IIOPInputStream.java:1832)
at
com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1214)
at
com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:425)
at
com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:308)
at
com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274)
at
com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015)
at
com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123)
at
com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531)
at
com.sun.corba.ee.impl.presentation.rmi.ExceptionHandlerImpl$ExceptionRWRMIImpl.read(ExceptionHandlerImpl.java:180)
at
com.sun.corba.ee.impl.presentation.rmi.ExceptionHandlerImpl.readException(ExceptionHandlerImpl.java:290)
at
com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readException(DynamicMethodMarshallerImpl.java:502)
at
com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:205)
at
com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
at
com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:227)
at
__TemplateEJBInterface_Remote_DynamicStub.create(__TemplateEJBInterface_Remote_DynamicStub.java)
at
_TemplateEJBInterface_Wrapper.create(_TemplateEJBInterface_Wrapper.java)
at
RemoteTemplateJPATest.aTemplateWithASimpleTargetShouldTotallyWork(RemoteTemplateJPATest.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.io.IOException: Mismatched serialization UIDs : Source
(Rep. IDRMI:javax.ejb.EJBException:958C33FAE8798D83:E573C8C3FC5EB5E2)
= E573C8C3FC5EB5E2 whereas Target (Rep. ID
RMI:javax.ejb.EJBException:958C33FAE8798D83:0B0EB2FF36CB22F6) =
0B0EB2FF36CB22F6
at
com.sun.corba.ee.impl.util.RepositoryId.useFullValueDescription(RepositoryId.java:679)
at
com.sun.corba.ee.impl.util.RepositoryId.useFullValueDescription(RepositoryId.java:639)
at
com.sun.corba.ee.impl.io.ValueHandlerImpl.useFullValueDescription(ValueHandlerImpl.java:360)
at
com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:422)
at
com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:308)
at
com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274)
at
com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015)
... 52 more
D'après ce que je comprend du bazar, ça devrait vouloir dire qu'un des
éléments renvoyés n'est pas sérialisable.
Ca n'est pas le cas de mon objet, que j'envoie déja à travers RMI (et
qui est donc sérialisé).
Ca n'est - à priori - pas le cas des exceptions, piuisque Throwable
implémente Serializable.
Alors que reste-t-il de non sérialisable ?
Au cas où vous poseriez la question, le client s'exécute sur un JDK
1.7.0, comme Glassfish d'ailleurs (vérifié avec JVisualVM). Il ne
s'agit donc pas du classique problème de version différente.
--
Nicolas Delsaux
Nicolas Delsaux
2011-11-03 14:27:54 UTC
Permalink
Ton exception est serialisable, mais celle-ci de defini pas de UID, ou qu'un de ces champs à le meme probleme.
Donc celui-ci est caluler automatiquement, et cela la valuer depends de la version de java.
Oui, mais là, je pense utiliser la même version de Java des deux
côtés. Qui plus est, la classe qui se sérialise mal est EJBException,
alors qu'est-ce que je fais ?
J'écris mon exception serialisable qui encapsule les exceptions jetées
par mon EJB ?



--
Nicolas Delsaux
Sebastien Cesbron
2011-11-03 14:31:33 UTC
Permalink
Salut

En général dans ce genre de cas je ne passe pas l'exception du serveur au
client car cela signifie que le client doit connaitre toutes les librairies
du serveur pour ne pas avoir de NoClassDefFoundError.

Pour moi la bonne pratique c'est d'avoir un intercepteur ejb côté serveur
qui loggue l'erreur et qui renvoie une erreur bateau au client disant
qu'il y a eu un problème technique au client.

Si c'est une exception plus fonctionnelle (genre donnée déjà existante,
modifiez la saisie) je convertis en une exception métier à moi.

Ca résoud pas forcément ton problème mais d'expérience ça simplifie ces
problèmes d'échange client/serveur

Seb
Post by Dominique Gallot
Post by Dominique Gallot
Ton exception est serialisable, mais celle-ci de defini pas de UID, ou
qu'un de ces champs à le meme probleme.
Post by Dominique Gallot
Donc celui-ci est caluler automatiquement, et cela la valuer depends de
la version de java.
Oui, mais là, je pense utiliser la même version de Java des deux
côtés. Qui plus est, la classe qui se sérialise mal est EJBException,
alors qu'est-ce que je fais ?
J'écris mon exception serialisable qui encapsule les exceptions jetées
par mon EJB ?
--
Nicolas Delsaux
Sébastien Lorber
2011-11-03 14:43:37 UTC
Permalink
Salut,

C'est vrai que ca serait plus simple de balancer une autre exception.

Après tu peux tjs réussir a sérialiser des objets qui ne le sont pas cf
http://thecodersbreakfast.net/index.php?post/2011/05/07/Serializing-non-serializable-objects

mais pas sur que ca soit facile a appliquer dans ton cas de figure
Post by Sebastien Cesbron
Salut
En général dans ce genre de cas je ne passe pas l'exception du serveur au
client car cela signifie que le client doit connaitre toutes les librairies
du serveur pour ne pas avoir de NoClassDefFoundError.
Pour moi la bonne pratique c'est d'avoir un intercepteur ejb côté serveur
qui loggue l'erreur et qui renvoie une erreur bateau au client disant
qu'il y a eu un problème technique au client.
Si c'est une exception plus fonctionnelle (genre donnée déjà existante,
modifiez la saisie) je convertis en une exception métier à moi.
Ca résoud pas forcément ton problème mais d'expérience ça simplifie ces
problèmes d'échange client/serveur
Seb
Post by Dominique Gallot
Post by Dominique Gallot
Ton exception est serialisable, mais celle-ci de defini pas de UID, ou
qu'un de ces champs à le meme probleme.
Post by Dominique Gallot
Donc celui-ci est caluler automatiquement, et cela la valuer depends de
la version de java.
Oui, mais là, je pense utiliser la même version de Java des deux
côtés. Qui plus est, la classe qui se sérialise mal est EJBException,
alors qu'est-ce que je fais ?
J'écris mon exception serialisable qui encapsule les exceptions jetées
par mon EJB ?
--
Nicolas Delsaux
Damien Lecan
2011-11-03 14:44:41 UTC
Permalink
Bonjour,

Je te rejoins Sébastien, sur quasiment tous les projets JavaEE, je dois
développer un intercepteur EJB côté serveur qui convertit des exceptions
afin d'éviter des NoClassDefFoundError côté client.

On se demande bien pourquoi ce n'est pas en standard dans la spec JavaEE ou
un service propriétaire fourni par les serveurs d'applications.

Damien
Post by Sebastien Cesbron
Salut
En général dans ce genre de cas je ne passe pas l'exception du serveur au
client car cela signifie que le client doit connaitre toutes les librairies
du serveur pour ne pas avoir de NoClassDefFoundError.
Pour moi la bonne pratique c'est d'avoir un intercepteur ejb côté serveur
qui loggue l'erreur et qui renvoie une erreur bateau au client disant
qu'il y a eu un problème technique au client.
Si c'est une exception plus fonctionnelle (genre donnée déjà existante,
modifiez la saisie) je convertis en une exception métier à moi.
Ca résoud pas forcément ton problème mais d'expérience ça simplifie ces
problèmes d'échange client/serveur
Seb
Post by Dominique Gallot
Post by Dominique Gallot
Ton exception est serialisable, mais celle-ci de defini pas de UID, ou
qu'un de ces champs à le meme probleme.
Post by Dominique Gallot
Donc celui-ci est caluler automatiquement, et cela la valuer depends de
la version de java.
Oui, mais là, je pense utiliser la même version de Java des deux
côtés. Qui plus est, la classe qui se sérialise mal est EJBException,
alors qu'est-ce que je fais ?
J'écris mon exception serialisable qui encapsule les exceptions jetées
par mon EJB ?
--
Nicolas Delsaux
Nicolas Delsaux
2011-11-03 15:01:20 UTC
Permalink
Post by Damien Lecan
Bonjour,
Je te rejoins Sébastien, sur quasiment tous les projets JavaEE, je dois
développer un intercepteur EJB côté serveur qui convertit des exceptions
afin d'éviter des NoClassDefFoundError côté client.
Moi, ej veux bien, mais là, le problème, c'est la classe EJBException
elle-même !
En gros, si j'écris un intercepteur, les exceptions qu'il envoie
seront toujours encapsulées dans des EJBException, qui seront toujours
mal décapsulées, non ?
Alors comment je fais ?
J'ai l'impression d'avoir brisé un truc, mais je sais pas encore lequel ...
--
Nicolas Delsaux
jerome moliere
2011-11-03 15:02:28 UTC
Permalink
+1 ..
mis à part le cas d'utilisateurs adeptes du Sm et collectionneurs de
croix de St André je ne vois guère la valeur ajoutée à faire remonter
des erreurs internes du serveur d'app surtout dans le cas de GF !!!

Jerome
J.MOLIERE - Mentor/J
auteur Eyrolles
blog: http://romjethoughts.blogspot.com
Baptiste MATHUS
2011-11-03 15:15:33 UTC
Permalink
+1 ..
mis à part le cas d'utilisateurs adeptes du Sm et collectionneurs de
croix de St André je ne vois guÚre la valeur ajoutée à faire remonter
des erreurs internes du serveur d'app
Aaaa, jusque là c'est bon, diantre il fatigue ou quoi ? Je plussoie même,
comme on dit.
surtout dans le cas de GF !!!
Ah ben non, il a pas tenu :-). C'est pas encore vendredi pourtant. ;-)
--
Baptiste <Batmat> MATHUS - http://batmat.net
Sauvez un arbre,
Mangez un castor !
Rémi Forax
2011-11-03 14:07:07 UTC
Permalink
Post by Nicolas Delsaux
Salut,
depuis ce matin, je me chamaille avec un test unitaire Glassfish
client qui m'affiche des erreurs RMI/IIOP/CORBA complètement dingues.
Après moult ivnestigations, j'en suis venu à la conclusion qu'une
exception arrive sur le serveur, et que cette exception ne passe pas
dans les tuyaux de RMI.
Maintenant, comment je peux corriger ?
Bon, je vais quand même vous donner plus de détails.
Depuis un client Glassfish, je récupère l'interface distante d'un EJB
qui stocke des données dans une base Neo4J en utilisant Empire-RDF
(https://github.com/mhgrove/Empire). Pas forcément conventionnel, mais
sacrément fonctionnel.
Sauf que, dans certains cas, je fais des bêtises (genre créer un objet
qui existe déja en base).
[#|2011-11-03T14:28:33.463+0100|WARNING|glassfish3.1.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=223;_ThreadName=Thread-2;|A
system exception occurred during an invocation on EJB TemplateEJB
method public java.lang.Object
AbstractCrudService.create(java.lang.Object)
javax.ejb.EJBException
at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5193)
at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5091)
at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4879)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)
at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:213)
at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:79)
at $Proxy531.create(Unknown Source)
at sun.reflect.GeneratedMethodAccessor190.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:144)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:528)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:199)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:990)
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:742)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
java.lang.IllegalArgumentException: Entity already exists: Template
id=RemoteTemplateJPATest#a template with an empty target
name=a template with an empty target
at com.clarkparsia.empire.impl.EntityManagerImpl.persist(Unknown Source)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:269)
at AbstractCrudService.create(AbstractCrudService.java:70)
at AbstractCrudService.create(AbstractCrudService.java:22)
at sun.reflect.GeneratedMethodAccessor187.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5366)
at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:57)
at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
at sun.reflect.GeneratedMethodAccessor162.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5338)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5326)
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:206)
... 18 more
Caused by: java.lang.IllegalArgumentException: Entity already exists: Template
id=RemoteTemplateJPATest#a template with an empty target
name=a template with an empty target
at com.clarkparsia.empire.impl.EntityManagerImpl.assertNotContains(Unknown
Source)
... 49 more
|#]
Le message est assez clair : "Entity already exists".
Avertissement: IOP00810011: Exception from readValue on ValueHandler
in CDRInputStream
org.omg.CORBA.MARSHAL: Avertissement: IOP00810011: Exception from
11 completed: Maybe
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248)
at com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107)
at com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511)
at com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99)
at $Proxy54.valuehandlerReadException(Unknown Source)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1022)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123)
at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531)
at com.sun.corba.ee.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:2162)
at com.sun.corba.ee.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2404)
at com.sun.corba.ee.impl.io.IIOPInputStream.defaultReadObjectDelegate(IIOPInputStream.java:596)
at com.sun.corba.ee.impl.io.InputStreamHook.defaultReadObject(InputStreamHook.java:233)
at java.lang.Throwable.readObject(Throwable.java:913)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.corba.ee.impl.io.IIOPInputStream.invokeObjectReader(IIOPInputStream.java:1832)
at com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1214)
at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:425)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:308)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123)
at com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531)
at com.sun.corba.ee.impl.presentation.rmi.ExceptionHandlerImpl$ExceptionRWRMIImpl.read(ExceptionHandlerImpl.java:180)
at com.sun.corba.ee.impl.presentation.rmi.ExceptionHandlerImpl.readException(ExceptionHandlerImpl.java:290)
at com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readException(DynamicMethodMarshallerImpl.java:502)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:205)
at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
at com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:227)
at __TemplateEJBInterface_Remote_DynamicStub.create(__TemplateEJBInterface_Remote_DynamicStub.java)
at _TemplateEJBInterface_Wrapper.create(_TemplateEJBInterface_Wrapper.java)
at RemoteTemplateJPATest.aTemplateWithASimpleTargetShouldTotallyWork(RemoteTemplateJPATest.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.io.IOException: Mismatched serialization UIDs : Source
(Rep. IDRMI:javax.ejb.EJBException:958C33FAE8798D83:E573C8C3FC5EB5E2)
= E573C8C3FC5EB5E2 whereas Target (Rep. ID
RMI:javax.ejb.EJBException:958C33FAE8798D83:0B0EB2FF36CB22F6) =
0B0EB2FF36CB22F6
at com.sun.corba.ee.impl.util.RepositoryId.useFullValueDescription(RepositoryId.java:679)
at com.sun.corba.ee.impl.util.RepositoryId.useFullValueDescription(RepositoryId.java:639)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.useFullValueDescription(ValueHandlerImpl.java:360)
at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:422)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:308)
at com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274)
at com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015)
... 52 more
D'après ce que je comprend du bazar, ça devrait vouloir dire qu'un des
éléments renvoyés n'est pas sérialisable.
Ca n'est pas le cas de mon objet, que j'envoie déja à travers RMI (et
qui est donc sérialisé).
Ca n'est - à priori - pas le cas des exceptions, piuisque Throwable
implémente Serializable.
Alors que reste-t-il de non sérialisable ?
Au cas où vous poseriez la question, le client s'exécute sur un JDK
1.7.0, comme Glassfish d'ailleurs (vérifié avec JVisualVM). Il ne
s'agit donc pas du classique problème de version différente.
Le problème est pas que c'est pas Serializable mais que ton EjbException
à pas
le même serialUID entre ta version server et ta version client.

Bref, il faut que ton EjbException soit le même sur ton server et ton
client.

Salut,
Rémi
jerome moliere
2011-11-03 15:10:16 UTC
Permalink
et en encore plus bref arretez de bricoler ou demander gentiment à
Alexis si c'est normal que le container client soit incompatible avec
le container serveur si jamais t'utilises la même version et les jars
de la même distrib ...
t'aurais pas une filouterie Maven qui rentrerait en lice ? du genre je
ne trouve pas la version demandée et je te colle la version trunk ou
un truc du genre...
J.MOLIERE - Mentor/J
auteur Eyrolles
blog: http://romjethoughts.blogspot.com
Post by Nicolas Delsaux
Salut,
depuis ce matin, je me chamaille avec un test unitaire Glassfish
client qui m'affiche des erreurs RMI/IIOP/CORBA complètement dingues.
Après moult ivnestigations, j'en suis venu à la conclusion qu'une
exception arrive sur le serveur, et que cette exception ne passe pas
dans les tuyaux de RMI.
Maintenant, comment je peux corriger ?
Bon, je vais quand même vous donner plus de détails.
Depuis un client Glassfish, je récupère l'interface distante d'un EJB
qui stocke des données dans une base Neo4J en utilisant Empire-RDF
(https://github.com/mhgrove/Empire). Pas forcément conventionnel, mais
sacrément fonctionnel.
Sauf que, dans certains cas, je fais des bêtises (genre créer un objet
qui existe déja en base).
[#|2011-11-03T14:28:33.463+0100|WARNING|glassfish3.1.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=223;_ThreadName=Thread-2;|A
system exception occurred during an invocation on EJB TemplateEJB
method public java.lang.Object
AbstractCrudService.create(java.lang.Object)
javax.ejb.EJBException
       at
com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5193)
       at
com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5091)
       at
com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4879)
       at
com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)
       at
com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)
       at
com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:213)
       at
com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:79)
       at $Proxy531.create(Unknown Source)
       at sun.reflect.GeneratedMethodAccessor190.invoke(Unknown Source)
       at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:601)
       at
com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:144)
       at
com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174)
       at
com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:528)
       at
com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:199)
       at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)
       at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)
       at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:990)
       at
com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)
       at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:742)
       at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539)
       at
com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324)
       at
com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
       at
com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
java.lang.IllegalArgumentException: Entity already exists: Template
       id=RemoteTemplateJPATest#a template with an empty target
       name=a template with an empty target
       at com.clarkparsia.empire.impl.EntityManagerImpl.persist(Unknown
Source)
       at
com.sun.enterprise.container.common.impl.EntityManagerWrapper.persist(EntityManagerWrapper.java:269)
       at AbstractCrudService.create(AbstractCrudService.java:70)
       at AbstractCrudService.create(AbstractCrudService.java:22)
       at sun.reflect.GeneratedMethodAccessor187.invoke(Unknown Source)
       at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:601)
       at
org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
       at
org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
       at
com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5366)
       at
com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
       at
com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
       at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
       at
org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:57)
       at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source)
       at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:601)
       at
com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
       at
com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
       at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
       at
com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
       at
com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
       at sun.reflect.GeneratedMethodAccessor162.invoke(Unknown Source)
       at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:601)
       at
com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
       at
com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
       at
com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
       at
com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5338)
       at
com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5326)
       at
com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:206)
       ... 18 more
Caused by: java.lang.IllegalArgumentException: Entity already exists: Template
       id=RemoteTemplateJPATest#a template with an empty target
       name=a template with an empty target
       at
com.clarkparsia.empire.impl.EntityManagerImpl.assertNotContains(Unknown
Source)
       ... 49 more
|#]
Le message est assez clair : "Entity already exists".
Avertissement: IOP00810011: Exception from readValue on ValueHandler
in CDRInputStream
org.omg.CORBA.MARSHAL: Avertissement: IOP00810011: Exception from
11 completed: Maybe
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
       at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
       at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
       at
com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:248)
       at
com.sun.corba.ee.spi.orbutil.logex.corba.CorbaExtension.makeException(CorbaExtension.java:95)
       at
com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.handleFullLogging(WrapperGenerator.java:387)
       at
com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator.access$400(WrapperGenerator.java:107)
       at
com.sun.corba.ee.spi.orbutil.logex.WrapperGenerator$2.invoke(WrapperGenerator.java:511)
       at
com.sun.corba.ee.spi.orbutil.proxy.CompositeInvocationHandlerImpl.invoke(CompositeInvocationHandlerImpl.java:99)
       at $Proxy54.valuehandlerReadException(Unknown Source)
       at
com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1022)
       at
com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123)
       at
com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531)
       at
com.sun.corba.ee.impl.io.IIOPInputStream.inputObjectField(IIOPInputStream.java:2162)
       at
com.sun.corba.ee.impl.io.IIOPInputStream.inputClassFields(IIOPInputStream.java:2404)
       at
com.sun.corba.ee.impl.io.IIOPInputStream.defaultReadObjectDelegate(IIOPInputStream.java:596)
       at
com.sun.corba.ee.impl.io.InputStreamHook.defaultReadObject(InputStreamHook.java:233)
       at java.lang.Throwable.readObject(Throwable.java:913)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
       at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:601)
       at
com.sun.corba.ee.impl.io.IIOPInputStream.invokeObjectReader(IIOPInputStream.java:1832)
       at
com.sun.corba.ee.impl.io.IIOPInputStream.inputObject(IIOPInputStream.java:1214)
       at
com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:425)
       at
com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:308)
       at
com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274)
       at
com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015)
       at
com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.read_value(CDRInputStream_1_0.java:1123)
       at
com.sun.corba.ee.impl.encoding.CDRInputObject.read_value(CDRInputObject.java:531)
       at
com.sun.corba.ee.impl.presentation.rmi.ExceptionHandlerImpl$ExceptionRWRMIImpl.read(ExceptionHandlerImpl.java:180)
       at
com.sun.corba.ee.impl.presentation.rmi.ExceptionHandlerImpl.readException(ExceptionHandlerImpl.java:290)
       at
com.sun.corba.ee.impl.presentation.rmi.DynamicMethodMarshallerImpl.readException(DynamicMethodMarshallerImpl.java:502)
       at
com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.privateInvoke(StubInvocationHandlerImpl.java:205)
       at
com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:152)
       at
com.sun.corba.ee.impl.presentation.rmi.codegen.CodegenStubBase.invoke(CodegenStubBase.java:227)
       at
__TemplateEJBInterface_Remote_DynamicStub.create(__TemplateEJBInterface_Remote_DynamicStub.java)
       at
_TemplateEJBInterface_Wrapper.create(_TemplateEJBInterface_Wrapper.java)
       at
RemoteTemplateJPATest.aTemplateWithASimpleTargetShouldTotallyWork(RemoteTemplateJPATest.java:97)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
       at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:601)
       at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
       at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
       at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
       at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
       at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
       at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
       at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
       at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
       at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
       at
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
       at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
       at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
       at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
       at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
       at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
       at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
       at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
       at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
       at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
       at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.io.IOException: Mismatched serialization UIDs : Source
(Rep. IDRMI:javax.ejb.EJBException:958C33FAE8798D83:E573C8C3FC5EB5E2)
= E573C8C3FC5EB5E2 whereas Target (Rep. ID
RMI:javax.ejb.EJBException:958C33FAE8798D83:0B0EB2FF36CB22F6) =
0B0EB2FF36CB22F6
       at
com.sun.corba.ee.impl.util.RepositoryId.useFullValueDescription(RepositoryId.java:679)
       at
com.sun.corba.ee.impl.util.RepositoryId.useFullValueDescription(RepositoryId.java:639)
       at
com.sun.corba.ee.impl.io.ValueHandlerImpl.useFullValueDescription(ValueHandlerImpl.java:360)
       at
com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:422)
       at
com.sun.corba.ee.impl.io.ValueHandlerImpl.readValueInternal(ValueHandlerImpl.java:308)
       at
com.sun.corba.ee.impl.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:274)
       at
com.sun.corba.ee.impl.encoding.CDRInputStream_1_0.readRMIIIOPValueType(CDRInputStream_1_0.java:1015)
       ... 52 more
D'après ce que je comprend du bazar, ça devrait vouloir dire qu'un des
éléments renvoyés n'est pas sérialisable.
Ca n'est pas le cas de mon objet, que j'envoie déja à travers RMI (et
qui est donc sérialisé).
Ca n'est - à priori - pas le cas des exceptions, piuisque Throwable
implémente Serializable.
Alors que reste-t-il de non sérialisable ?
Au cas où vous poseriez la question, le client s'exécute sur un JDK
1.7.0, comme Glassfish d'ailleurs (vérifié avec JVisualVM). Il ne
s'agit donc pas du classique problème de version différente.
Le problème est pas que c'est pas Serializable mais que ton EjbException à
pas
le même serialUID entre ta version server et ta version client.
Bref, il faut que ton EjbException soit le même sur ton server et ton
client.
Salut,
Rémi
Continuer la lecture sur narkive:
Loading...