【问题标题】:Why does Persistence.createEntityManagerFactory("transactions-optional") errors when appengine is deployed为什么在部署 appengine 时会出现 Persistence.createEntityManagerFactory("transactions-optional") 错误
【发布时间】:2013-04-23 08:47:00
【问题描述】:

我创建了一个运行良好的应用引擎,并以调试模式从我的 Google 云 SQL 数据库返回记录。当我部署 appegine 并运行端点时,它会出错。我在 appengine 日志中得到的错误是:

原因:org.datanucleus.exceptions.NucleusUserException:没有可用的“jdbc”类型的 StoreManager。确保您已将相关的 DataNucleus 存储插件放入您的 CLASSPATH 中,如果通过 JNDI 或 DataSource 定义连接,您还需要提供持久性属性“datanucleus.storeManagerType”。

这里是war\WEB-INF\lib 目录下的jar 列表:

  • appengine-api-1.0-sdk-1.7.6
  • appengine-api-labs
  • appengine 端点
  • appengine-jsr107cache-1.7.6
  • asm-4.0
  • com.sun.tools.xjc_2.2.0
  • com.sun.xml.bind_2.2.0.v201004141950
  • datanucleus-api-jdo-3.1.3
  • datanucleus-api-jpa-3.1.3
  • datanucleus-appengine-2.1.2
  • datanucleus-core-3.1.3
  • eclipselink
  • eclipselink-jpa-modelgen_2.4.1.v20121003-ad44345
  • gcm 服务器
  • geronimo-jpa_2.0_spec-1.0
  • javax.activation_1.1.0.v201108011116
  • javax.mail_1.4.0.v201005080615
  • javax.persistence_2.0.4.v201112161009
  • javax.xml.bind_2.2.0.v201105210648
  • javax.xml.stream_1.0.1.v201004272200
  • jdo-api-3.0.1
  • json_simple-1.1
  • jsr107cache-1.1
  • jta-1.1
  • org.eclipse.persistence.jpars_2.4.1.v20121003-ad44345

这是我的 persistence.xml:

<persistence 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" version="2.0">

    <persistence-unit name="transactions-optional" transaction-type="RESOURCE_LOCAL">
        <provider></provider>
        <class>com.example.myapp.Class1</class>
        <class>com.example.myapp.Class2</class>
        <properties>
            <property name="datanucleus.NontransactionalRead" value="true"/>
            <property name="datanucleus.NontransactionalWrite" value="true"/>
            <property name="javax.persistence.jdbc.driver" value="com.google.appengine.api.rdbms.AppEngineDriver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:google:rdbms://something.com:someproj:someapp/somedb"/>
            <property name="javax.persistence.jdbc.user" value=""/>
            <property name="javax.persistence.jdbc.password" value=""/>
        </properties>
    </persistence-unit>
</persistence>

使用: 云 sql JPA 数据核 v2 开发工具包 1.7.6 Jre7

由于它在调试模式下工作正常,我不明白问题可能是什么,因为我是 appengine 的新手。如果您需要更多信息,请告诉我。

谢谢大家。

【问题讨论】:

    标签: google-app-engine jpa datanucleus google-cloud-sql


    【解决方案1】:

    确定您正在使用哪个 JPA 提供程序...用于 Cloud SQL(不是 AppEngine,因此您不需要“datanucleus-appengine”,也不需要“datanucleus-api-jdo" FWIW)。您有 DataNucleus JPA(实际上是版本 3,但由于某种原因省略了 datanucleus-rdbms jar,但 CloudSQL 需要它),并且您也有 EclipseLink。然后,您没有在 persistence.xml 中设置持久性提供程序,因此将其全部留给机会尝试提供给您的...它尝试了 DataNucleus JPA,但您没有包含 datanucleus-rdbms jar,因此如果没有它,您将无法持久保存到 RDBMS。

    【讨论】:

    • 感谢 DataNucleus 的帮助。我已经进行了您建议的更改。当我在调试模式下运行 appengine 时,它​​现在会出现以下错误:“javax.persistence.PersistenceException:缺少必需的表:目录\“\”架构\“\”中的\“MYTABLE\”。DataNucleus 需要此表执行其持久化操作。您的 MetaData 不正确,或者您需要启用“datanucleus.autoCreateTables”。我需要做什么来解决这个问题?我有一个类似的错误,我在实体类中使用了@Table 注释,但这现在不起作用。
    • 它告诉你做什么,添加持久性属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多