2

私は App Engine 1.8.5 とそのデフォルトの nucleus データ ストア バージョンです。私は、GAE プラグインを備えたローカル Eclipse セットアップで作業しています。

すべてのデータストアと検索のために、ローカルマシンで正常に動作しています。Google App Engine サーバーに正常にデプロイされました。データ ストア リレーションを持たない URL は問題なく正常に動作します。問題は、サーバーでのデータストアの取得にあります。GAE データ核エンジンを使用したデータストアに JPA API を使用しています。

問題は、データストアからデータを取得しているときに、ローカル マシンではなくサーバーで PESSIMISTIC_READ エラーがスローされることです。行き詰まり、先に進めません。

参照用に、スタック トレース、persistence.xml、および EMF.java ファイルを貼り付けました。助けてください。

Caused by: java.lang.NoSuchFieldError: PESSIMISTIC_READ
    at org.datanucleus.api.jpa.JPAQuery.getResultList(JPAQuery.java:171)
    at com.ideafolks.codelist.datastore.dao.SectorDAO.getAllSector(SectorDAO.java:122)
    at com.ideafolks.codelist.restful.SectorService.getAllSector(SectorService.java:57)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:45)

persistence.xml

<persistence-unit name="transactions-optional">
    <provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
    <class>com.ideafolks.codelist.datastore.tables.Sector</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="datanucleus.NontransactionalRead" value="true" />
        <property name="datanucleus.NontransactionalWrite" value="true" />
        <property name="datanucleus.ConnectionURL" value="appengine" />
        <property name="datanucleus.singletonEMFForName" value="true" /> <!-- 
        <property name="datanucleus.appengine.datastoreReadConsistency" value="EVENTUAL" />  -->
    </properties>
</persistence-unit>

EMF.java

public final class EMF {
    private static final EntityManagerFactory emfInstance = Persistence
            .createEntityManagerFactory("transactions-optional");

    private EMF() {
    }

    public static EntityManagerFactory get() {
        return emfInstance;
    }
}
4

4 に答える 4

1

おそらく、persistence-api-1.0.jar をクラスパスに追加しました。geronimo-jpa_2.0_spec-1.0.jar には新しいバージョンの JPA API (LockModeType には PESSIMISTIC_READ フィールドがあります) があるため、persistence-api-1.0.jar を削除するだけですべて正常に動作します。クラスパスの上位に GAE コンテナーがある可能性があるため、アプリはローカルで動作しました。

于 2015-01-02T21:40:55.247 に答える
0

エラーは単純に、jar geronimo-jpa_2.0_spec-1.0 にメンバー フィールド PESSIMISTIC_READ が見つからないことです。このjarのすべてのバージョンを試しました。このメンバーが見つからないだけです。だから私がしたことは、この列挙型をプロジェクトに追加するだけです

パッケージ javax.persistence;

public enum LockModeType { READ, WRITE, OPTIMISTIC, OPTIMISTIC_FORCE_INCREMENT, PESSIMISTIC_READ, PESSIMISTIC_WRITE, PESSIMISTIC_FORCE_INCREMENT, NONE }

問題が解決しました。

于 2014-09-10T12:48:41.440 に答える