[ 
http://issues.apache.org/jira/browse/GERONIMO-1851?page=comments#action_12374585
 ] 

Aaron Mulder commented on GERONIMO-1851:
----------------------------------------

Appears to be caused by BasicProxyManager.createProxy(name, ClassLoader) to 
include classes with an empty constructor in addition to interfaces.  I'm 
removing the bit about classes with empty constructors and doing a full build 
with tests, and if it works, checking it in.

> 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

Reply via email to