更新到GAE-java-sdk-1.6.0 / 1.6.1 persistencemanager singleton之后的FUBAR

时间:2011-12-21 19:51:37

标签: google-app-engine google-cloud-datastore jdo gae-eclipse-plugin

我从GAE-JAVA-SDK-1.5.5更新到1.6.0和1.6.1后,我的应用程序停止正常运行。它开始在RPC服务上给出错误。

Exception while dispatching incoming RPC call com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract void com.skip.school.client.service.AdminService.addStudent(com.skip.school.shared.Student)' threw an unexpected exception: java.lang.NoClassDefFoundError: Could not initialize class com.skip.school.server.PmfSingleton

Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.skip.school.server.PmfSingleton

可以在pastebin找到整个日志。

我有一个单例,应该在用户首次启动rpc时初始化。 我使用的单身人士应该是正确的,这里有很多关于stackeroverflow的例子以及网络上的任何地方。

public final class PmfSingleton {
    private final static PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional");

    private PmfSingleton() { }

    public static PersistenceManagerFactory get() {
    return pmfInstance;    
    }
}

我在所有服务器实现中都调用了这个类。

PersistenceManager pm = PmfSingleton.get().getPersistenceManager();

这适用于sdk 1.5.5及更低版本,但不适用于sdk 1.6.0及以上版本,是否有人知道如果我想使用sdk 1.6.0及更高版本我应该改变什么呢?

2 个答案:

答案 0 :(得分:1)

我在其他地方读到这个问题与datanucelus jar的过时版本有关。我已经更新到eclipse插件中提供的最新版本v1.6.1,并通过删除旧罐子的所有旧引用来修复它,只留下这些3:

  • datanucleus-appengine-1.0.10.final.jar
  • DataNucleus将核 - 1.1.5.jar
  • DataNucleus将-JPA-1.1.5.jar

我希望这适合你!

答案 1 :(得分:0)

升级到较新版本的AppEngine SDK后,我遇到了同样的问题。事实证明问题是我在部署文件夹中挂了一个旧版本的appengine-api-1.0-sdk jar。

查看应用程序的war\WEB-INF\lib文件夹,看看是否有两个不同版本的appengine-api-1.0-sdk-1.x.y.jar。我通过删除appengine-api-1.0-sdk-1.5.x文件来修复它。