You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geronimo.apache.org by David Jencks <da...@yahoo.com> on 2009/12/03 09:46:46 UTC

Mysterious linkage error building console/console-tomcat

I'm getting a LinkageError I don't know how to diagnose or fix when  
building console-tomcat.  I've committed all my code changes and  
pushed pluto snapshots so it should be possible to reproduce.

Here's the stack trace:

[FelixDispatchQueue] DEBUG org.apache.geronimo.plugins.console- 
tomcat_base-portlets.war-DEPLOYMENT - BundleEvent STARTED
[main] ERROR org.apache.geronimo.deployment.Deployer - Deployment  
failed due to
java.lang.LinkageError: loader constraint violation: when resolving  
overridden method "jsp.about_jsp._jspService(Ljavax/servlet/http/ 
HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V" the  
class loader (instance of org/apache/felix/framework/ModuleImpl 
$ModuleClassLoader) of the current class, jsp/about_jsp, and its  
superclass loader (instance of org/apache/felix/framework/ModuleImpl 
$ModuleClassLoader), have different Class objects for the type javax/ 
servlet/http/HttpServletRequest used in the signature
         at java.lang.Class.getDeclaredMethods0(Native Method)
         at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
         at java.lang.Class.getDeclaredMethods(Class.java:1791)
         at  
org.apache.xbean.finder.ClassFinder.<init>(ClassFinder.java:165)
         at  
org 
.apache 
.geronimo 
.web25 
.deployment 
.AbstractWebModuleBuilder 
.createWebAppClassFinder(AbstractWebModuleBuilder.java:694)
         at  
org 
.apache 
.geronimo 
.web25 
.deployment 
.AbstractWebModuleBuilder 
.createWebAppClassFinder(AbstractWebModuleBuilder.java:637)
         at  
org 
.apache 
.geronimo 
.web25 
.deployment 
.AbstractWebModuleBuilder 
.configureBasicWebModuleAttributes(AbstractWebModuleBuilder.java:714)
         at  
org 
.apache 
.geronimo 
.tomcat 
.deployment.TomcatModuleBuilder.addGBeans(TomcatModuleBuilder.java:353)
         at  
org 
.apache 
.geronimo 
.j2ee 
.deployment 
.SwitchingModuleBuilder.addGBeans(SwitchingModuleBuilder.java:166)
         at  
org 
.apache 
.geronimo 
.j2ee 
.deployment.EARConfigBuilder.buildConfiguration(EARConfigBuilder.java: 
707)
         at  
org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:248)
         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:597)
         at  
org 
.apache 
.geronimo 
.gbean 
.runtime.ReflectionMethodInvoker.invoke(ReflectionMethodInvoker.java:34)
         at  
org 
.apache 
.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:131)
         at  
org 
.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java: 
856)
         at  
org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java: 
245)
         at  
org 
.apache 
.geronimo.mavenplugins.car.PackageMojo.invokeDeployer(PackageMojo.java: 
519)
         at  
org 
.apache 
.geronimo.mavenplugins.car.PackageMojo.buildPackage(PackageMojo.java: 
337)
         at  
org 
.apache.geronimo.mavenplugins.car.PackageMojo.execute(PackageMojo.java: 
234)
         at  
org 
.apache 
.maven 
.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
         at  
org 
.apache 
.maven 
.lifecycle 
.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java: 
694)
         at  
org 
.apache 
.maven 
.lifecycle 
.DefaultLifecycleExecutor 
.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
         at  
org 
.apache 
.maven 
.lifecycle 
.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
         at  
org 
.apache 
.maven 
.lifecycle 
.DefaultLifecycleExecutor 
.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
         at  
org 
.apache 
.maven 
.lifecycle 
.DefaultLifecycleExecutor 
.executeTaskSegments(DefaultLifecycleExecutor.java:348)
         at  
org 
.apache 
.maven 
.lifecycle 
.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
         at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java: 
328)
         at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
         at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
         at  
org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
         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:597)
         at  
org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
         at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
         at  
org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
         at org.codehaus.classworlds.Launcher.main(Launcher.java:375)

I've poked around in the IDEA debugger and...

clazz is the jsp.about_jsp class

clazz.getClassLoader().loadClass(clazz.getName(),  
true).getDeclaredMethods() also throws the linkage error

clazz 
.getClassLoader 
().loadClass("javax.servlet.http.HttpServletRequest").getClassLoader()  
gives the classloader for bundle 137, the console-tomcat temporary  
bundle.  This bundle has a wire for javax.servlet.http to bundle 60,  
the servlet 3.0 spec jar, but the classloader seems to be loading  
another copy of the class anyway.

clazz 
.getSuperclass 
().getClassLoader 
().loadClass("javax.servlet.http.HttpServletRequest").getClassLoader()  
gives the classloader for bundle 60 as expected.

Anyone have any ideas?

thanks
david jencks

Re: Mysterious linkage error building console/console-tomcat

Posted by Jarek Gawor <jg...@gmail.com>.
The servlet classes was coming from within the war file. Just marked
the servlet dependency as provided. Things looks better now but
getting another error.

Jarek

On Thu, Dec 3, 2009 at 3:46 AM, David Jencks <da...@yahoo.com> wrote:
> I'm getting a LinkageError I don't know how to diagnose or fix when building
> console-tomcat.  I've committed all my code changes and pushed pluto
> snapshots so it should be possible to reproduce.
>
> Here's the stack trace:
>
> [FelixDispatchQueue] DEBUG
> org.apache.geronimo.plugins.console-tomcat_base-portlets.war-DEPLOYMENT -
> BundleEvent STARTED
> [main] ERROR org.apache.geronimo.deployment.Deployer - Deployment failed due
> to
> java.lang.LinkageError: loader constraint violation: when resolving
> overridden method
> "jsp.about_jsp._jspService(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V"
> the class loader (instance of
> org/apache/felix/framework/ModuleImpl$ModuleClassLoader) of the current
> class, jsp/about_jsp, and its superclass loader (instance of
> org/apache/felix/framework/ModuleImpl$ModuleClassLoader), have different
> Class objects for the type javax/servlet/http/HttpServletRequest used in the
> signature
>        at java.lang.Class.getDeclaredMethods0(Native Method)
>        at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
>        at java.lang.Class.getDeclaredMethods(Class.java:1791)
>        at org.apache.xbean.finder.ClassFinder.<init>(ClassFinder.java:165)
>        at
> org.apache.geronimo.web25.deployment.AbstractWebModuleBuilder.createWebAppClassFinder(AbstractWebModuleBuilder.java:694)
>        at
> org.apache.geronimo.web25.deployment.AbstractWebModuleBuilder.createWebAppClassFinder(AbstractWebModuleBuilder.java:637)
>        at
> org.apache.geronimo.web25.deployment.AbstractWebModuleBuilder.configureBasicWebModuleAttributes(AbstractWebModuleBuilder.java:714)
>        at
> org.apache.geronimo.tomcat.deployment.TomcatModuleBuilder.addGBeans(TomcatModuleBuilder.java:353)
>        at
> org.apache.geronimo.j2ee.deployment.SwitchingModuleBuilder.addGBeans(SwitchingModuleBuilder.java:166)
>        at
> org.apache.geronimo.j2ee.deployment.EARConfigBuilder.buildConfiguration(EARConfigBuilder.java:707)
>        at org.apache.geronimo.deployment.Deployer.deploy(Deployer.java:248)
>        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:597)
>        at
> org.apache.geronimo.gbean.runtime.ReflectionMethodInvoker.invoke(ReflectionMethodInvoker.java:34)
>        at
> org.apache.geronimo.gbean.runtime.GBeanOperation.invoke(GBeanOperation.java:131)
>        at
> org.apache.geronimo.gbean.runtime.GBeanInstance.invoke(GBeanInstance.java:856)
>        at
> org.apache.geronimo.kernel.basic.BasicKernel.invoke(BasicKernel.java:245)
>        at
> org.apache.geronimo.mavenplugins.car.PackageMojo.invokeDeployer(PackageMojo.java:519)
>        at
> org.apache.geronimo.mavenplugins.car.PackageMojo.buildPackage(PackageMojo.java:337)
>        at
> org.apache.geronimo.mavenplugins.car.PackageMojo.execute(PackageMojo.java:234)
>        at
> org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
>        at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
>        at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
>        at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
>        at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
>        at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
>        at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
>        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
>        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
>        at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
>        at
> org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
>        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:597)
>        at
> org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
>        at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
>        at
> org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
>        at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
>
> I've poked around in the IDEA debugger and...
>
> clazz is the jsp.about_jsp class
>
> clazz.getClassLoader().loadClass(clazz.getName(), true).getDeclaredMethods()
> also throws the linkage error
>
> clazz.getClassLoader().loadClass("javax.servlet.http.HttpServletRequest").getClassLoader()
> gives the classloader for bundle 137, the console-tomcat temporary bundle.
>  This bundle has a wire for javax.servlet.http to bundle 60, the servlet 3.0
> spec jar, but the classloader seems to be loading another copy of the class
> anyway.
>
> clazz.getSuperclass().getClassLoader().loadClass("javax.servlet.http.HttpServletRequest").getClassLoader()
> gives the classloader for bundle 60 as expected.
>
> Anyone have any ideas?
>
> thanks
> david jencks
>