Hello,

I use the remote ejb/CommandServiceBean ejb in order to query an enterprise 
(EJB) jBPM deployment. 

The EJB client only depends on the jBPM jar (for the various Command 
implementations) and on the JBoss client jar. If a Hibernate exceptin occurs, 
it is wrapped by a JBPMException and rethrown. When deserialiezed on the client 
side (which does not have a Hibernate dependency), a ClassNotFoundException 
occurs.

Here is the exception handling code in the EJB :

catch (Exception e) {
  |       throw new JbpmException("couldn't execute "+command, e);
  | }

I think the CommandServiceBean should not wrap internal implementation-specific 
exceptions; it should instead simply copy the stack trace and throw a new 
implementation-independent exception which contains the exception trace without 
containing the causes themselves. That typically avoids ClassNotFoundExceptions 
without losing exception history.


  | java.lang.reflect.UndeclaredThrowableException
  |     at $Proxy1.execute(Unknown Source)
  |     at 
fr.bnf.jbpm.client.GetInvalidDocumentsTest.testExecute(GetInvalidDocumentsTest.java:27)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |     at java.lang.reflect.Method.invoke(Method.java:585)
  |     at junit.framework.TestCase.runTest(TestCase.java:164)
  |     at junit.framework.TestCase.runBare(TestCase.java:130)
  |     at junit.framework.TestResult$1.protect(TestResult.java:106)
  |     at junit.framework.TestResult.runProtected(TestResult.java:124)
  |     at junit.framework.TestResult.run(TestResult.java:109)
  |     at junit.framework.TestCase.run(TestCase.java:120)
  |     at junit.framework.TestSuite.runTest(TestSuite.java:230)
  |     at junit.framework.TestSuite.run(TestSuite.java:225)
  |     at 
org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
  |     at 
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  |     at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
  |     at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
  |     at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
  |     at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
  | Caused by: java.lang.ClassNotFoundException: 
org.hibernate.collection.PersistentMap (no security manager: RMI class loader 
disabled)
  |     at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:371)
  |     at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
  |     at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
  |     at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
  |     at 
sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
  |     at 
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1544)
  |     at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1466)
  |     at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1699)
  |     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  |     at 
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1908)
  |     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1832)
  |     at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
  |     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  |     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
  |     at java.util.ArrayList.readObject(ArrayList.java:591)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  |     at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |     at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |     at java.lang.reflect.Method.invoke(Method.java:585)
  |     at 
java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:946)
  |     at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1809)
  |     at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1719)
  |     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305)
  |     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
  |     at java.rmi.MarshalledObject.get(MarshalledObject.java:135)
  |     at 
org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy.invoke(JRMPInvokerProxy.java:134)
  |     at 
org.jboss.invocation.InvokerInterceptor.invokeInvoker(InvokerInterceptor.java:365)
  |     at 
org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:197)
  |     at 
org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
  |     at 
org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:70)
  |     at 
org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:112)
  |     at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
  |     ... 20 more
  | 

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4059066#4059066

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4059066
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to