geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Aaron Mulder (JIRA)" <...@geronimo.apache.org>
Subject [jira] Created: (GERONIMO-1851) Proxy logic busted
Date Fri, 14 Apr 2006 21:48:00 GMT
Proxy logic busted
------------------

         Key: GERONIMO-1851
         URL: http://issues.apache.org/jira/browse/GERONIMO-1851
     Project: Geronimo
        Type: Bug
    Security: public (Regular issues) 
  Components: kernel  
    Versions: 1.1    
    Reporter: Aaron Mulder
    Priority: Critical
     Fix For: 1.1


If you go to the Import/Export portlet in 1.1, you get this:

UNEXPECTED ERROR for class org.apache.geronimo.jetty.JettyWebAppContext$$EnhancerByCGLIB$$1b72c5bb
(geronimo/welcome-jetty/1.1-SNAPSHOT/car?J2EEApplication=null,j2eeType=WebModule,name=geronimo/welcome-jetty/1.1-SNAPSHOT/car)
java.lang.ArrayIndexOutOfBoundsException: -1
        at org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.createGBeanInvokers(ProxyMethodInterceptor.java:116)
        at org.apache.geronimo.kernel.basic.ProxyMethodInterceptor.<init>(ProxyMethodInterceptor.java:70)
        at org.apache.geronimo.kernel.basic.BasicProxyManager.getMethodInterceptor(BasicProxyManager.java:317)
        at org.apache.geronimo.kernel.basic.BasicProxyManager$ManagedProxyFactory.createProxy(BasicProxyManager.java:290)
        at org.apache.geronimo.kernel.basic.BasicProxyManager.createProxy(BasicProxyManager.java:179)
        at org.apache.geronimo.console.util.KernelManagementHelper.getModuleForConfiguration(KernelManagementHelper.java:850)

The error is generated at the last line of this snippet of ProxyMethodInterceptor:

            invokers[getSuperIndex(proxyType, proxyType.getMethod("equals", new Class[]{Object.class}))]
= new EqualsInvoke(kernel);
            invokers[getSuperIndex(proxyType, proxyType.getMethod("hashCode", null))] = new
HashCodeInvoke();
            invokers[getSuperIndex(proxyType, proxyType.getMethod("toString", null))] = new
ToStringInvoke(proxyType.getName());
            if(GeronimoManagedBean.class.isAssignableFrom(proxyType)) {
                invokers[getSuperIndex(proxyType, proxyType.getMethod("getState", null))]
= new GetStateInvoke(kernel);
                invokers[getSuperIndex(proxyType, proxyType.getMethod("getStateInstance",
null))] = new GetStateInstanceInvoke(kernel);
                invokers[getSuperIndex(proxyType, proxyType.getMethod("start", null))] = new
StartInvoke(kernel);

In other words, it is returning a -1 from getSuperIndex on the "start()" method for the proxyType.
 However, the "if" statement established that ProxyType is assignable to GeronimoManagedBean,
which has a "start()" method.

So it seems like the logic that constructs the invokers and/or whatever getSuperIndex uses
is not finding all the methods that the proxy exposes, or else there are some classloader
issues causing identical methods to be detected as different, etc.

The logic displayed above is unchanged from HEAD where the same portlet works, though the
portlet code has changed significantly.  I'm not sure what's different elsewhere in the ProxyMethodInterceptor
class or the rest of the proxy infrastructure.

To replicate this, start Geronimo, and click the "Plugins" entry in the console.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Mime
View raw message