gwt + монго (морфия) = несовместимыйклассизменение_ошибки

Gwt -> RPC -> MongoDB (Морфия)

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 java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at 

com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload$WebAppClassLoaderExtension.findClass(JettyLauncher.java:372)
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:366)
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at 

com.google.gwt.dev.shell.jetty.JettyLauncher$WebAppContextWithReload$WebAppClassLoaderExtension.findClass(JettyLauncher.java:372)
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:366)
    at org.mortbay.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:337)
    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:113)
    at 

myapp.database.MyCodeImpl.getDataSource(MyCodeImpl.java:42)
    at 

MyCodeImpl.getDataSource():

public Datastore getDataSource() {
    try {
        Morphia morphia = new Morphia();
        Mongo db = new Mongo("localhost");
        return morphia.createDatastore(db, getDatabaseName());
    } catch (UnknownHostException e) {
        e.printStackTrace();
        throw new DatabaseException();
    }
}

строка 42: Mongo db = new Mongo("localhost");

Без GWT работает нормально. Почему не работает с GWT? Похоже, проблема с com.mongodb.DbDecoder... Есть предложения?


person Alex    schedule 03.01.2012    source источник


Ответы (1)


Судя по трассировке стека, это проблема GWT. Убедитесь, что вы не развертываете gwt-user.jar или gwt-dev.jar на своем Jetty. Также убедитесь, что у вас есть только одна версия GWT в вашем пути к классам.

person Nat    schedule 04.01.2012
comment
согласованный! Убедитесь, что все ваши библиотеки .jar (MongoDB и т. д.) находятся в war\WEB-INF\lib, а не в каких-либо подкаталогах. - person vladaman; 07.04.2012