[
https://jira.jboss.org/jira/browse/JBAS-4654?page=com.atlassian.jira.plug...
]
Stefan Guilhen commented on JBAS-4654:
--------------------------------------
We don't have any NoSuchMethodExceptions being raised in the IIOP tests anymore, but
that's probably because the root EJBException has been fixed. This means that JacORB
can still behave badly when a non CORBA exception is thrown at server side because the
org.jacorb.orb.SystemExceptionHelper is indeed erroneously assuming that all
SystemExceptions have the same constructor, as Adrian already spotted.
Besides Adrian's suggestion of adding a catch clause for the NoSuchMethodException,
another approach to solve this would be to change the SystemExceptionHelper.className()
method to return org.omg.CORBA.UNKNOWN when a org.omg.CORBA.portable.UnknownException is
received, as CORBA.UNKNOWN has the constructor JacORB is expecting. Regarding the original
message, the problem is that even though UnknownException contains the root exception,
this root exception is not written to the exception reply. As a result, when the exception
is restored in SystemExceptionHelper, this information is no longer available.
JacORB's UknownException has a constructor that also takes a message, so we could
probably use it to inform the original message. I have to try this to see if it works.
Should we add another patch to our brewed JacORB to prevent NoSuchMethodExceptions?
JacORB throwing spurious UNKNOWN NoSuchMethodException
------------------------------------------------------
Key: JBAS-4654
URL:
https://jira.jboss.org/jira/browse/JBAS-4654
Project: JBoss Application Server
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: IIOP service
Affects Versions: JBossAS-4.2.1.GA
Reporter: Adrian Brock
Assignee: Stefan Guilhen
Fix For: JBossAS-5.0.0.GA
Attachments: SystemExceptionHelper.java
When a RemoteException contains an exception that isn't mapped to a CorbaException,
JacORB is throwing a spurious NoSuchMethodException.
e.g. the following error thrown by the server in the testsuite:
2007-08-31 11:42:48,113 TRACE
[org.jboss.proxy.ejb.EjbObjectCorbaServant.bank-iiop/Account] Exception in EJBObject
invocation
javax.management.MBeanException
at
org.jboss.mx.interceptor.ReflectedDispatcher.handleInvocationExceptions(ReflectedDispatcher.java:184)
at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:165)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at
org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
at
org.jboss.proxy.ejb.EjbObjectCorbaServant._invoke(EjbObjectCorbaServant.java:287)
at org.jacorb.poa.RequestProcessor.invokeOperation(Unknown Source)
at org.jacorb.poa.RequestProcessor.process(Unknown Source)
at org.jacorb.poa.RequestProcessor.run(Unknown Source)
Caused by: java.rmi.ServerException: EJBException:; nested exception is:
javax.ejb.EJBException: Internal error getting results for field member owner
at org.jboss.ejb.plugins.LogInterceptor.handleException(LogInterceptor.java:365)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:209)
at
org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:138)
at org.jboss.ejb.EntityContainer.internalInvoke(EntityContainer.java:532)
at org.jboss.ejb.Container.invoke(Container.java:989)
at sun.reflect.GeneratedMethodAccessor97.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
... 8 more
Caused by: javax.ejb.EJBException: Internal error getting results for field member owner
at
org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMPFieldBridge.loadArgumentResults(JDBCAbstractCMPFieldBridge.java:498)
at
org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMPFieldBridge.loadArgumentResults(JDBCAbstractCMPFieldBridge.java:432)
at
org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCAbstractCMPFieldBridge.loadInstanceResults(JDBCAbstractCMPFieldBridge.java:393)
at
org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityCommand.execute(JDBCLoadEntityCommand.java:207)
at
org.jboss.ejb.plugins.cmp.jdbc.JDBCLoadEntityCommand.execute(JDBCLoadEntityCommand.java:88)
at
org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.loadEntity(JDBCStoreManager.java:646)
at
org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.loadEntity(JDBCStoreManager.java:628)
at
org.jboss.ejb.plugins.CMPPersistenceManager.loadEntity(CMPPersistenceManager.java:406)
at
org.jboss.resource.connectionmanager.CachedConnectionInterceptor.loadEntity(CachedConnectionInterceptor.java:252)
at
org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invoke(EntitySynchronizationInterceptor.java:243)
at
org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:158)
at
org.jboss.ejb.plugins.EntityReentranceInterceptor.invoke(EntityReentranceInterceptor.java:126)
at
org.jboss.ejb.plugins.EntityInstanceInterceptor.invoke(EntityInstanceInterceptor.java:280)
at
org.jboss.ejb.plugins.EntityLockInterceptor.invoke(EntityLockInterceptor.java:104)
at
org.jboss.ejb.plugins.EntityCreationInterceptor.invoke(EntityCreationInterceptor.java:76)
at
org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:63)
at
org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:121)
at
org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181)
at
org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:238)
at
org.jboss.ejb.plugins.security.PreSecurityInterceptor.invoke(PreSecurityInterceptor.java:105)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205)
... 15 more
Caused by: java.sql.SQLException: Got a
org.omg.stub.javax.ejb._EJBObject_Stub[cl=org.jboss.mx.loading.UnifiedClassLoader3@ff45de{
url=vfsfile:/home/ejort/jboss-head/b
Results in the following on the client:
"CORBA UNKNOWN 0 No; nested exception is:
org.omg.CORBA.UNKNOWN: org.omg.CORBA.portable.UnknownException vmcid: 0x0 minor
code: 0 completed: No"
type="java.rmi.RemoteException">java.rmi.RemoteExcept
ion: CORBA UNKNOWN 0 No; nested exception is:
org.omg.CORBA.UNKNOWN: org.omg.CORBA.portable.UnknownException vmcid: 0x0 minor
code: 0 completed: No
at com.sun.corba.se.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:282)
at javax.rmi.CORBA.Util.mapSystemException(Util.java:67)
at org.jboss.proxy.ejb.DynamicIIOPStub.invoke(DynamicIIOPStub.java:148)
at org.jboss.test.bankiiop.interfaces._Account_Stub.getPrimaryKey(Unknown
Source)
at
org.jboss.test.bankiiop.test.BankStressTestCase.testTeller(BankStressTestCase.java:88)
at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
at junit.extensions.TestSetup.run(TestSetup.java:25)
Caused by: org.omg.CORBA.UNKNOWN: org.omg.CORBA.portable.UnknownException vmcid: 0x0
minor code: 0 completed: No
at org.jacorb.orb.SystemExceptionHelper.read(Unknown Source)
at org.jacorb.orb.ReplyReceiver.getReply(Unknown Source)
at org.jacorb.orb.Delegate.invoke_internal(Unknown Source)
at org.jacorb.orb.Delegate.invoke(Unknown Source)
at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)
at org.jboss.proxy.ejb.DynamicIIOPStub.invoke(DynamicIIOPStub.java:123)
... 23 more
Caused by: java.lang.NoSuchMethodException:
org.omg.CORBA.portable.UnknownException.<init>(java.lang.String, int,
org.omg.CORBA.CompletionStatus)
at java.lang.Class.getConstructor0(Class.java:2678)
at java.lang.Class.getConstructor(Class.java:1629)
... 29 more
The NoSuchMethodException is obviously not the cause.
It comes from jacorb assuming that all Corba SystemExceptions have a constructor of a
certain signature
(something that is not true for UnknownException).
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira