[jboss-jira] [JBoss JIRA] Commented: (JBAS-4654) JacORB throwing spurious UNKNOWN NoSuchMethodException

Stefan Guilhen (JIRA) jira-events at lists.jboss.org
Fri Sep 26 15:47:31 EDT 2008


    [ https://jira.jboss.org/jira/browse/JBAS-4654?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12431432#action_12431432 ] 

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 at 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

        



More information about the jboss-jira mailing list