Google app engine 为什么在部署appengine时Persistence.createEntityManagerFactory(“事务可选”)会出错

Google app engine 为什么在部署appengine时Persistence.createEntityManagerFactory(“事务可选”)会出错,google-app-engine,jpa,datanucleus,google-cloud-sql,Google App Engine,Jpa,Datanucleus,Google Cloud Sql,我已经创建了一个appengine,它运行良好,并在调试模式下从我的Google cloud SQL db返回记录。当我部署AppEngine并运行端点时,它会出错。我在appengine日志中得到的错误是: 原因:org.datanucleus.exceptions.nucleuserexception:没有类型为“jdbc”的可用StoreManager。确保已将相关的DataNucleus存储插件放入类路径中,如果通过JNDI或DataSource定义连接,还需要提供持久性属性“DataN

我已经创建了一个appengine,它运行良好,并在调试模式下从我的Google cloud SQL db返回记录。当我部署AppEngine并运行端点时,它会出错。我在appengine日志中得到的错误是:

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

以下是war\WEB-INF\lib目录中的JAR列表:

  • appengine-api-1.0-sdk-1.7.6
  • 阿彭金api实验室
  • 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-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>

com.example.myapp.Class1
com.example.myapp.Class2
使用: 云sql JPA Datanucleous v2 SDK 1.7.6 Jre7

由于它在调试模式下运行良好,我不明白问题可能是什么,因为我是appengine新手。如果你需要更多信息,请告诉我


谢谢大家。

决定使用哪个JPA提供商。。。对于云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
\”,位于目录\“Schema\”。DataNucleus要求此表执行其持久性操作。您的元数据不正确,或者需要启用\”datanucleus.autoCreateTables\“”。我需要做什么来解决这个问题?我有一个模拟错误,我在实体类中使用了@Table注释,但现在不起作用。它告诉你怎么做,添加持久性属性