0

从 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 及更高版本,我应该改变什么?

4

2 回答 2

1

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

  • datanucleus-appengine-1.0.10.final.jar
  • datanucleus-core-1.1.5.jar
  • 数据核-jpa-1.1.5.jar

我希望这对你有用!

于 2012-01-19T20:57:29.220 回答
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文件来修复它。

于 2012-06-15T11:41:20.360 回答