0

JSF (Primefaces) と JPA を使用してアプリケーションを作成し、それを GAE にデプロイしようとしています。まず、ローカル アプリ エンジン SDK を試しています。CloudSQL で JPA を使用しようとすると問題が発生します。ここでEclipseを使用してそれを行う方法の指示に従っています:

https://developers.google.com/eclipse/docs/cloudsql-jpatools

ただし、次のエラーが表示されます。

Caused by: javax.persistence.PersistenceException: Provider error. Provider: org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider
    at javax.persistence.Persistence.createFactory(Persistence.java:176)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:112)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:66)
    at org.Handlers.EMFService.<clinit>(EMFService.java:8)
    ... 51 more
Caused by: java.lang.NullPointerException
    at org.datanucleus.jpa.EntityManagerFactoryImpl.initialisePMF(EntityManagerFactoryImpl.java:452)
    at org.datanucleus.jpa.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:355)
    at org.datanucleus.store.appengine.jpa.DatastoreEntityManagerFactory.<init>(DatastoreEntityManagerFactory.java:63)
    at org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider.createEntityManagerFactory(DatastorePersistenceProvider.java:35)
    at javax.persistence.Persistence.createFactory(Persistence.java:172)
    ... 54 more

さらに、App Engine Datastore へのアクセスには datanucleus が使用されていると思います。ただし、リレーショナル クラウド SQL データベースに接続しようとしています (稼働中です)。したがって、データ核がそれと何の関係があるのか​​ わかりません。

GAE の次のガイドで提案されているように、JPA 仕様を実装するために Eclipselink を使用しています: https://developers.google.com/eclipse/docs/cloudsql-jpatools

以下に、persistence.xml も示します。

<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="googleeclipselink"
        transaction-type="RESOURCE_LOCAL">

        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

        <class>org.entities.Department</class>
        <class>org.entities.Employee</class>
        <class>org.entities.Partner</class>
        <class>org.entities.Project</class>
        <class>org.entities.User</class>

        <properties>
            <!-- <property name="datanucleus.NontransactionalRead" value="true" /> 
                <property name="datanucleus.NontransactionalWrite" value="true" /> <property 
                name="datanucleus.ConnectionURL" value="appengine" /> -->
            <property name="javax.persistence.jdbc.driver"
                value="com.google.appengine.api.rdbms.AppEngineDriver" />
            <property name="javax.persistence.jdbc.url"
                value="jdbc:google:rdbms://fotisgonidisseerc:googlecloudsql/researchprojects" />
            <property name="javax.persistence.jdbc.user" value="" />
            <property name="javax.persistence.jdbc.password" value="" />
        </properties>
    </persistence-unit>
</persistence>

誰でもそれを解決する方法のヒントを教えてもらえますか?

4

1 に答える 1

1

この問題にしばらく時間を費やした後、DataNucleus ライブラリを WEB-INF/lib から削除する必要があることがわかりました。また、クラスパスに EclipseLink lib を追加する必要がありました。これは、EclipseLink を JPA 実装として使用しているためです。そのため、DataNucleus が競合を引き起こしているため、削除する必要があります。Google Plug-in for Eclipse はこれを自動的に行うと思いますが、失敗することもあるようです。

于 2012-11-27T10:36:58.060 に答える