GAE-JAVA-SDK-1.5.5から1.6.0および1.6.1にアップデートした後、私のアプリケーションは正常に機能しなくなりました。 RPCサービスでエラーが発生し始めました。GAE-java-sdk-1.6.0/1.6.1に更新した後のFUBAR persistencemanagerシングルトン
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
ログ全体は、で見つけることができます。
ユーザーが最初に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以上を使用したい場合、私は変更すべきか間違っている」とは何を知っていますか?
原因:java.lang.NoSuchMethodError:com.google.appengine.api.datastore.TransactionOptions $ Builder.withXG(Z)Lcom/google/appengine/api/datastore/TransactionOptions; – DataNucleus
それはどういう意味ですか?これは、オプションのトランザクション(getPersistencManagerFactoryのオプション)がもうそれを行う正しい方法ではないことを意味しますか? – Aegis
これは、いくつかのGAE内部APIが異なるように見えることを意味します(JDOではなく、そのJDOプラグインが呼び出します)。一部のGoogleユーザーからのコメントが必要です。 – DataNucleus