我从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及更高版本我应该改变什么呢?
答案 0 :(得分:1)
我在其他地方读到这个问题与datanucelus jar的过时版本有关。我已经更新到eclipse插件中提供的最新版本v1.6.1,并通过删除旧罐子的所有旧引用来修复它,只留下这些3:
我希望这适合你!
答案 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
文件来修复它。