[jboss-jira] [JBoss JIRA] (WFLY-5788) EJB client can fail with CNFE when deserializing EJBException since wrapped cause might not be on classpath such as CacheException

Radoslav Husar (JIRA) issues at jboss.org
Thu Jan 21 12:32:00 EST 2016


    [ https://issues.jboss.org/browse/WFLY-5788?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13152078#comment-13152078 ] 

Radoslav Husar edited comment on WFLY-5788 at 1/21/16 12:31 PM:
----------------------------------------------------------------

Rejecting pull request, comment to approach removing all RuntimeExceptions before sending over the wire:

The failing tests rely on the wrapped RuntimeExceptions or are throwing RuntimeExceptions form the user code. Typically those would be business exceptions and not RuntimeExceptions.

We will implement this by extending the SPI to keep correct encapsulation to remove CacheExceptions that are not "understood" by the client.


was (Author: rhusar):
Rejecting pull request, comment:

The failing tests rely on the wrapped RuntimeExceptions or are throwing RuntimeExceptions form the user code. Typically those would be business exceptions and not RuntimeExceptions.

We will implement this by extending the SPI to keep correct encapsulation to remove CacheExceptions that are not "understood" by the client.

> EJB client can fail with CNFE when deserializing EJBException since wrapped cause might not be on classpath such as CacheException
> ----------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: WFLY-5788
>                 URL: https://issues.jboss.org/browse/WFLY-5788
>             Project: WildFly
>          Issue Type: Bug
>          Components: Clustering
>    Affects Versions: 10.0.0.CR5
>            Reporter: Michal Vinkler
>            Assignee: Radoslav Husar
>
> -RuntimeExceptions thrown when accessing the SFSB cache should be rethrown as an EJBException. Otherwise the client doesn't know how to serialize implementation specific exception classes.-
> This is not correct. The cause is wrapped in the EJBException but it is the cause that cannot be deserialized. Updated the Jira summary and crossed ^ out. --Rado
> Seen in our failover tests for remote stateful EJBs - scenarios.
> After failing a node, client logs these error messages:
> {code}
> 2015/11/27 04:10:03:241 EST [ERROR][Runner - 894] HOST perf17.mw.lab.eng.bos.redhat.com:rootProcess:c - Error getting response. <javax.ejb.EJBException: java.lang.ClassNotFoundException: org.infinispan.statetransfer.OutdatedTopologyException>
>         javax.ejb.EJBException: java.lang.ClassNotFoundException: org.infinispan.statetransfer.OutdatedTopologyException
>         at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:238)
>         at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183)
>         at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146)
>         at com.sun.proxy.$Proxy2.getSerialAndIncrement(Unknown Source)
>         at org.jboss.smartfrog.clustering.ejb3.StatefulSBProcessorFactoryImpl$EJB3RequestProcessor.processRequest(StatefulSBProcessorFactoryImpl.java:84)
>         at org.jboss.smartfrog.loaddriver.CompoundRequestProcessorFactoryImpl$CompoundRequestProcessor.processRequest(CompoundRequestProcessorFactoryImpl.java:52)
>         at org.jboss.smartfrog.loaddriver.Runner.run(Runner.java:103)
>         at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.ClassNotFoundException: org.infinispan.statetransfer.OutdatedTopologyException
>         at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>         at java.lang.Class.forName0(Native Method)
>         at java.lang.Class.forName(Class.java:348)
>         at org.jboss.marshalling.AbstractClassResolver.loadClass(AbstractClassResolver.java:131)
>         at org.jboss.marshalling.AbstractClassResolver.resolveClass(AbstractClassResolver.java:112)
>         at org.jboss.marshalling.river.RiverUnmarshaller.doReadClassDescriptor(RiverUnmarshaller.java:948)
>         at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1255)
>         at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
>         at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:224)
>         at org.jboss.marshalling.river.RiverUnmarshaller.readFields(RiverUnmarshaller.java:1745)
>         at org.jboss.marshalling.river.RiverObjectInputStream.defaultReadObject(RiverObjectInputStream.java:81)
>         at java.lang.Throwable.readObject(Throwable.java:914)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:497)
>         at org.jboss.marshalling.reflect.SerializableClass.callReadObject(SerializableClass.java:307)
>         at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1637)
>         at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1606)
>         at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1606)
>         at org.jboss.marshalling.river.RiverUnmarshaller.doInitSerializable(RiverUnmarshaller.java:1606)
>         at org.jboss.marshalling.river.RiverUnmarshaller.doReadNewObject(RiverUnmarshaller.java:1285)
>         at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:276)
>         at org.jboss.marshalling.river.RiverUnmarshaller.doReadObject(RiverUnmarshaller.java:209)
>         at org.jboss.marshalling.AbstractObjectInput.readObject(AbstractObjectInput.java:41)
>         at org.jboss.ejb.client.remoting.InvocationExceptionResponseHandler$MethodInvocationExceptionResultProducer.getResult(InvocationExceptionResponseHandler.java:79)
>         at org.jboss.ejb.client.EJBClientInvocationContext$1.run(EJBClientInvocationContext.java:282)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:279)
>         at org.jboss.ejb.client.EJBObjectInterceptor.handleInvocationResult(EJBObjectInterceptor.java:64)
>         at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
>         at org.jboss.ejb.client.EJBHomeInterceptor.handleInvocationResult(EJBHomeInterceptor.java:88)
>         at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
>         at org.jboss.ejb.client.TransactionInterceptor.handleInvocationResult(TransactionInterceptor.java:46)
>         at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:290)
>         at org.jboss.ejb.client.ReceiverInterceptor.handleInvocationResult(ReceiverInterceptor.java:129)
>         at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:265)
>         at org.jboss.ejb.client.EJBClientInvocationContext.awaitResponse(EJBClientInvocationContext.java:453)
>         at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:204)
>         ... 7 more
> {code}
> Link
> http://jenkins.mw.lab.eng.bos.redhat.com/hudson/job/eap-7x-failover-ejb-ejbremote-jvmkill-dist-async/17/console-perf17/



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the jboss-jira mailing list