【问题标题】:Google app engine and JPA with Eclipse plug-in带有 Eclipse 插件的 Google 应用引擎和 JPA
【发布时间】:2012-11-26 15:31:24
【问题描述】:

我用 JSF (Primefaces) 和 JPA 创建了一个应用程序,我正在尝试在 GAE 上部署它。首先,我尝试使用本地应用引擎 sdk。尝试将 JPA 与 CloudSQL 一起使用时遇到问题。我在这里按照有关如何使用 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

更重要的是我认为datanucleus是用来访问App引擎Datastore的。但是我正在尝试连接到关系云 sql 数据库(它已启动并正在运行)。所以我不明白数据核与它有什么关系。

我正在使用 Eclipselink 来实现 GAE 的以下指南所建议的 JPA 规范: 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>

谁能告诉我如何解决它?

【问题讨论】:

  • 首先澄清你的persistence.xml是什么以及你要部署到哪个数据存储区?根据 JPA 规范,它将使用 CLASSPATH 中的 JPA 实现,除非您的 persistence.xml 定义要使用的(并且它存在于 CLASSPATH 中)

标签: google-app-engine jpa datanucleus google-plugin-eclipse


【解决方案1】:

在这个问题上花了一些时间后,我发现我必须从 WEB-INF/lib 中删除 DataNucleus 库。我还需要在我的类路径中添加 EclipseLink 库。 这是因为我使用 EclipseLink 作为 JPA 实现。因此 DataNucleus 引起了冲突,因此需要删除。 我猜 Google Plug-in for Eclipse 会自动执行此操作,但显然有时它会失败。

【讨论】:

    猜你喜欢
    • 2013-10-16
    • 2014-06-09
    • 2011-02-01
    • 2013-10-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多