19

I am not able to figure out why I get this error. I tried cleaning up libs that are redundant and so forth.

I get the error when I try to do:

  mongo = new Mongo(host, port);

The funny thing is that I can run any unit tests I made from IDE (IntelliJ), but when I try to run it through Tomcat I get this:

  Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.
    sfatandrei.db.MongoManager]: Constructor threw exception; nested exception is java.lang.IncompatibleCla
    ssChangeError: Implementing class
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInst
    antiationStrategy.java:110)
        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(Constructo
    rResolver.java:280)
        ... 82 more
    Caused by: java.lang.IncompatibleClassChangeError: Implementing class
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2889)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2889)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
        at com.mongodb.MongoOptions.reset(MongoOptions.java:47)
        at com.mongodb.MongoOptions.<init>(MongoOptions.java:29)
        at com.mongodb.Mongo.<init>(Mongo.java:148)
        at com.mongodb.Mongo.<init>(Mongo.java:137)
        at com.sfatandrei.db.MongoManager.<init>(MongoManager.java:28)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.
    java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
        ... 84 more

mvn dependency:tree -Dverbose

[INFO] 
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ mongodb-performance-test ---
[INFO] com.sfatandrei:mongodb-performance-test:war:1.0
[INFO] +- junit:junit:jar:4.8.2:test
[INFO] +- org.springframework:spring-core:jar:3.1.1.RELEASE:compile
[INFO] |  +- org.springframework:spring-asm:jar:3.1.1.RELEASE:compile
[INFO] |  \- (commons-logging:commons-logging:jar:1.1.1:compile - omitted for duplicate)
[INFO] +- org.springframework:spring-beans:jar:3.1.1.RELEASE:compile
[INFO] |  \- (org.springframework:spring-core:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] +- org.springframework:spring-context:jar:3.1.1.RELEASE:compile
[INFO] |  +- org.springframework:spring-aop:jar:3.1.1.RELEASE:compile
[INFO] |  |  +- (aopalliance:aopalliance:jar:1.0:compile - omitted for duplicate)
[INFO] |  |  +- (org.springframework:spring-asm:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  |  +- (org.springframework:spring-beans:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  |  \- (org.springframework:spring-core:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-beans:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-core:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- org.springframework:spring-expression:jar:3.1.1.RELEASE:compile
[INFO] |  |  \- (org.springframework:spring-core:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  \- (org.springframework:spring-asm:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] +- org.springframework:spring-jdbc:jar:3.1.1.RELEASE:compile
[INFO] |  +- (org.springframework:spring-beans:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-core:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  \- org.springframework:spring-tx:jar:3.1.1.RELEASE:compile
[INFO] |     +- (aopalliance:aopalliance:jar:1.0:compile - omitted for duplicate)
[INFO] |     +- (org.springframework:spring-aop:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |     +- (org.springframework:spring-beans:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |     +- (org.springframework:spring-context:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |     \- (org.springframework:spring-core:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] +- org.springframework:spring-web:jar:3.1.1.RELEASE:compile
[INFO] |  +- aopalliance:aopalliance:jar:1.0:compile
[INFO] |  +- (org.springframework:spring-beans:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-context:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  \- (org.springframework:spring-core:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] +- org.springframework:spring-webmvc:jar:3.1.1.RELEASE:compile
[INFO] |  +- (org.springframework:spring-asm:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-beans:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-context:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- org.springframework:spring-context-support:jar:3.1.1.RELEASE:compile
[INFO] |  |  +- (org.springframework:spring-beans:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  |  +- (org.springframework:spring-context:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  |  \- (org.springframework:spring-core:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-core:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-expression:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  \- (org.springframework:spring-web:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] +- org.springframework.data:spring-data-mongodb:jar:1.0.0.RELEASE:compile
[INFO] |  +- (org.springframework:spring-beans:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- (org.springframework:spring-expression:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  +- org.springframework.data:spring-data-commons-core:jar:1.2.0.RELEASE:compile
[INFO] |  |  +- (org.springframework:spring-beans:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  |  \- (org.springframework:spring-tx:jar:3.1.1.RELEASE:compile - omitted for duplicate)
[INFO] |  \- org.mongodb:mongo-java-driver:jar:2.7.1:compile
[INFO] +- log4j:log4j:jar:1.2.16:compile
[INFO] +- org.springframework:spring-test:jar:3.1.1.RELEASE:compile
[INFO] +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided
[INFO] +- org.mongodb:bson:jar:2.3:compile
[INFO] \- org.codehaus.jackson:jackson-mapper-asl:jar:1.9.6:compile
[INFO]    \- org.codehaus.jackson:jackson-core-asl:jar:1.9.6:compile

I am using jdk 7, tomcat 7.0.27, maven 3.0.3.

Andrei Sfat
  • 8,440
  • 5
  • 49
  • 69
  • 1
    Generally that error is due to compiling with one set of JAR files and running against a different set. It could be your class or one of the classes in one of the JARs you use. Unfortunately, it doesn't appear to be telling us which class took the error. – Hot Licks May 07 '12 at 01:24
  • @HotLicks, actually, it says which class took the error: `at com.mongodb.MongoOptions.reset(MongoOptions.java:47) ` – Andrei Sfat May 07 '12 at 05:44
  • 1
    No, that's where the error occurred. But the error occurred on the class being loaded, whatever that was. If you can examine the code at that point you may be able to decipher what class was being loaded. – Hot Licks May 07 '12 at 11:32
  • @HotLicks, thinking of excluding each depedency inside pom.xml that are described by `mvn dependency:tree` as duplicate. Update coming soon regarding this. – Andrei Sfat May 07 '12 at 11:46
  • did not help excluding the duplicate ones – Andrei Sfat May 07 '12 at 13:02
  • Got a similar IncompatibleClassChangeError with embedded Tomcat in a Eclipse project. The maven eclipse-plugin added another eclipse project together with its debug-dependencies. Check if your eclipse project depends on other projects, if it does, rename the version of the other project. – Markus Kull Jun 06 '12 at 11:29
  • @MarkusKull, I had 2 different versions of `bson`, that's why I had that error. – Andrei Sfat Jun 06 '12 at 11:39

2 Answers2

20

That looks like an error of byte code level. Maybe you have two versions of the same library in your tomcat server.

See: What causes java.lang.IncompatibleClassChangeError?

Community
  • 1
  • 1
James Gan
  • 6,988
  • 4
  • 28
  • 36
  • 4
    it seems that `mongo-java-driver` has inside a class that uses org.bson and I added myself `bson` dependency and that was interfering – Andrei Sfat May 07 '12 at 14:29
2

If you get this problem under JBoss, it's most likely due to the fact that JBoss bundles RESTeasy REST implementation as default. If you package your own REST library to EAR/WAR file, you need to disable the default RESTeasy for your deployed library to work.

Zds
  • 4,311
  • 2
  • 24
  • 28