-
Bug
-
Resolution: Unresolved
-
Major
-
None
-
CentOS 5.0, jdk 1.6.0_3, maven 2.0.10, hudson 1.335, tomcat 6.0.20
HUDSON_HOME /d1/hudson
catalina.base /opt/tomcat6/apache-tomcat-6.0.20
catalina.home /opt/tomcat6/apache-tomcat-6.0.20
catalina.useNaming true
common.loader ${catalina.home}/lib,${catalina.home}/lib/*.jar
file.encoding UTF-8
file.encoding.pkg sun.io
file.separator /
java.awt.graphicsenv sun.awt.X11GraphicsEnvironment
java.awt.headless true
java.awt.printerjob sun.print.PSPrinterJob
java.class.path :/opt/tomcat6/apache-tomcat-6.0.20/bin/bootstrap.jar
java.class.version 50.0
java.endorsed.dirs /opt/tomcat6/apache-tomcat-6.0.20/endorsed
java.ext.dirs /usr/java/jdk1.6.0_16/jre/lib/ext:/usr/java/packages/lib/ext
java.home /usr/java/jdk1.6.0_16/jre
java.io.tmpdir /opt/tomcat6/apache-tomcat-6.0.20/temp
java.library.path /usr/java/jdk1.6.0_16/jre/lib/i386/server:/usr/java/jdk1.6.0_16/jre/lib/i386:/usr/java/jdk1.6.0_16/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib
java.naming.factory.initial org.apache.naming.java.javaURLContextFactory
java.naming.factory.url.pkgs org.apache.naming
java.runtime.name Java(TM) SE Runtime Environment
java.runtime.version 1.6.0_16-b01
java.specification.name Java Platform API Specification
java.specification.vendor Sun Microsystems Inc.
java.specification.version 1.6
java.util.logging.config.file /opt/tomcat6/apache-tomcat-6.0.20/conf/logging.properties
java.util.logging.manager org.apache.juli.ClassLoaderLogManager
java.vendor Sun Microsystems Inc.
java.vendor.url http://java.sun.com/
java.vendor.url.bug http://java.sun.com/cgi-bin/bugreport.cgi
java.version 1.6.0_16
java.vm.info mixed mode
java.vm.name Java HotSpot(TM) Server VM
java.vm.specification.name Java Virtual Machine Specification
java.vm.specification.vendor Sun Microsystems Inc.
java.vm.specification.version 1.0
java.vm.vendor Sun Microsystems Inc.
java.vm.version 14.2-b01
jna.platform.library.path /usr/lib:/lib
line.separator
os.arch i386
os.name Linux
os.version 2.6.18-128.el5
package.access sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.,sun.beans.
package.definition sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
path.separator :
server.loader
shared.loader
sun.arch.data.model 32
sun.boot.class.path /usr/java/jdk1.6.0_16/jre/lib/resources.jar:/usr/java/jdk1.6.0_16/jre/lib/rt.jar:/usr/java/jdk1.6.0_16/jre/lib/sunrsasign.jar:/usr/java/jdk1.6.0_16/jre/lib/jsse.jar:/usr/java/jdk1.6.0_16/jre/lib/jce.jar:/usr/java/jdk1.6.0_16/jre/lib/charsets.jar:/usr/java/jdk1.6.0_16/jre/classes
sun.boot.library.path /usr/java/jdk1.6.0_16/jre/lib/i386
sun.cpu.endian little
sun.cpu.isalist
sun.io.unicode.encoding UnicodeLittle
sun.java.launcher SUN_STANDARD
sun.jnu.encoding UTF-8
sun.management.compiler HotSpot Tiered Compilers
sun.os.patch.level unknown
svnkit.ssh2.persistent false
tomcat.util.buf.StringCache.byte.enabled true
user.country US
user.dir /
user.home /root
user.language en
user.name root
user.timezone America/Los_Angeles
Environment Variables
Name ? Value
CATALINA_OPTS -DHUDSON_HOME=/d1/hudson -Xmx1024m -Djava.awt.headless=true
CONSOLE /dev/console
HOME /
HUDSON_BASEDIR /d1/hudson
INIT_VERSION sysvinit-2.86
LANG en_US.UTF-8
LD_LIBRARY_PATH /usr/java/jdk1.6.0_16/jre/lib/i386/server:/usr/java/jdk1.6.0_16/jre/lib/i386:/usr/java/jdk1.6.0_16/jre/../lib/i386
NLSPATH /usr/dt/lib/nls/msg/%L/%N.cat
PATH /sbin:/usr/sbin:/bin:/usr/bin
PREVLEVEL N
PWD /
RUNLEVEL 3
SELINUX_INIT YES
SHLVL 4
TERM linux
XFILESEARCHPATH /usr/dt/app-defaults/%L/Dt
_ /usr/bin/java
CentOS 5.0, jdk 1.6.0_3, maven 2.0.10, hudson 1.335, tomcat 6.0.20 HUDSON_HOME /d1/hudson catalina.base /opt/tomcat6/apache-tomcat-6.0.20 catalina.home /opt/tomcat6/apache-tomcat-6.0.20 catalina.useNaming true common.loader ${catalina.home}/lib,${catalina.home}/lib/*.jar file.encoding UTF-8 file.encoding.pkg sun.io file.separator / java.awt.graphicsenv sun.awt.X11GraphicsEnvironment java.awt.headless true java.awt.printerjob sun.print.PSPrinterJob java.class.path :/opt/tomcat6/apache-tomcat-6.0.20/bin/bootstrap.jar java.class.version 50.0 java.endorsed.dirs /opt/tomcat6/apache-tomcat-6.0.20/endorsed java.ext.dirs /usr/java/jdk1.6.0_16/jre/lib/ext:/usr/java/packages/lib/ext java.home /usr/java/jdk1.6.0_16/jre java.io.tmpdir /opt/tomcat6/apache-tomcat-6.0.20/temp java.library.path /usr/java/jdk1.6.0_16/jre/lib/i386/server:/usr/java/jdk1.6.0_16/jre/lib/i386:/usr/java/jdk1.6.0_16/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib java.naming.factory.initial org.apache.naming.java.javaURLContextFactory java.naming.factory.url.pkgs org.apache.naming java.runtime.name Java(TM) SE Runtime Environment java.runtime.version 1.6.0_16-b01 java.specification.name Java Platform API Specification java.specification.vendor Sun Microsystems Inc. java.specification.version 1.6 java.util.logging.config.file /opt/tomcat6/apache-tomcat-6.0.20/conf/logging.properties java.util.logging.manager org.apache.juli.ClassLoaderLogManager java.vendor Sun Microsystems Inc. java.vendor.url http://java.sun.com/ java.vendor.url.bug http://java.sun.com/cgi-bin/bugreport.cgi java.version 1.6.0_16 java.vm.info mixed mode java.vm.name Java HotSpot(TM) Server VM java.vm.specification.name Java Virtual Machine Specification java.vm.specification.vendor Sun Microsystems Inc. java.vm.specification.version 1.0 java.vm.vendor Sun Microsystems Inc. java.vm.version 14.2-b01 jna.platform.library.path /usr/lib:/lib line.separator os.arch i386 os.name Linux os.version 2.6.18-128.el5 package.access sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.,sun.beans. package.definition sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper. path.separator : server.loader shared.loader sun.arch.data.model 32 sun.boot.class.path /usr/java/jdk1.6.0_16/jre/lib/resources.jar:/usr/java/jdk1.6.0_16/jre/lib/rt.jar:/usr/java/jdk1.6.0_16/jre/lib/sunrsasign.jar:/usr/java/jdk1.6.0_16/jre/lib/jsse.jar:/usr/java/jdk1.6.0_16/jre/lib/jce.jar:/usr/java/jdk1.6.0_16/jre/lib/charsets.jar:/usr/java/jdk1.6.0_16/jre/classes sun.boot.library.path /usr/java/jdk1.6.0_16/jre/lib/i386 sun.cpu.endian little sun.cpu.isalist sun.io.unicode.encoding UnicodeLittle sun.java.launcher SUN_STANDARD sun.jnu.encoding UTF-8 sun.management.compiler HotSpot Tiered Compilers sun.os.patch.level unknown svnkit.ssh2.persistent false tomcat.util.buf.StringCache.byte.enabled true user.country US user.dir / user.home /root user.language en user.name root user.timezone America/Los_Angeles Environment Variables Name ? Value CATALINA_OPTS -DHUDSON_HOME=/d1/hudson -Xmx1024m -Djava.awt.headless=true CONSOLE /dev/console HOME / HUDSON_BASEDIR /d1/hudson INIT_VERSION sysvinit-2.86 LANG en_US.UTF-8 LD_LIBRARY_PATH /usr/java/jdk1.6.0_16/jre/lib/i386/server:/usr/java/jdk1.6.0_16/jre/lib/i386:/usr/java/jdk1.6.0_16/jre/../lib/i386 NLSPATH /usr/dt/lib/nls/msg/%L/%N.cat PATH /sbin:/usr/sbin:/bin:/usr/bin PREVLEVEL N PWD / RUNLEVEL 3 SELINUX_INIT YES SHLVL 4 TERM linux XFILESEARCHPATH /usr/dt/app-defaults/%L/Dt _ /usr/bin/java
We have a maven 2.0.10 build that buids a product that uses servlets, hibernate, spring and jersey.
The maven build runs fine from the command line. We added a profile to turn on cobertura and is activated using the BUILD_NUMBER property. The build runs fine with the profile loaded explicitly using the -P maven switch. However, when run from hudson with cobertura code coverage turned on, we get exceptions from spring:
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'liveResource' must be of type [com.corp.m5es.rest.resources.livepc.LiveResource], but was actually of type [$Proxy114]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:168)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:884)
at com.sun.jersey.spi.spring.container.SpringComponentProviderFactory$SpringManagedComponentProvider.getInstance(SpringComponentProviderFactory.java:182)
at com.sun.jersey.server.impl.component.IoCResourceFactory$PerRequestWrapper.getInstance(IoCResourceFactory.java:138)
at com.sun.jersey.server.impl.application.WebApplicationContext.getResource(WebApplicationContext.java:160)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:64)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:111)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:63)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:654)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:612)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:603)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:309)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:425)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:590)
at com.corp.m5es.spring.M5SpringServlet.service(M5SpringServlet.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at com.sun.grizzly.http.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:141)
at com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:220)
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:148)
at com.sun.grizzly.http.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:621)
at com.sun.grizzly.http.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:552)
at com.sun.grizzly.http.DefaultProcessorTask.process(DefaultProcessorTask.java:800)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:152)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.SelectorThread$1.execute(SelectorThread.java:649)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:67)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56)
We are not sure what is causing this. Perhaps byte-code engineering is broken.
suspecting it might be an OS related issue ( hudson is running on CentOS and our dev machines are windows), we created a windows slave and directed the build to that slave. But we got the same errors.
LiveResource is a java class with class level @Component and @Scope("prototype") annotations and has spring auto-wired members.
I haven't been able to craete a test case that can reproduce this yet.
Unless you can run the cobertura goal outside of hudson, I don't think this is a hudson issue. Cobertura needs to instrument your classes, and Spring is also instrumenting them, and these two processes clash if Spring is generating subclasses instead of implementing an interface. Is LiveResource a concrete type? If so, then you can get around this problem by creating an interface for it and injecting the interface type instead of the concrete type.
It is unfortunate that Spring and Cobertura collide in this manner, but if you Google around a bit, you will see that this is a known issue. It's a pain to have to change your code and create interfaces just to get around this, but in the few places I found it in our code, it turned out we probably should have had an interface anyway.