2

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

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

这是一个列表或 war\WEB-INF\lib 目录中的 jars:

  • appengine-api-1.0-sdk-1.7.6
  • appengine-api-实验室
  • 应用引擎端点
  • appengine-jsr107cache-1.7.6
  • asm-4.0
  • com.sun.tools.xjc_2.2.0
  • com.sun.xml.bind_2.2.0.v201004141950
  • 数据核-api-jdo-3.1.3
  • 数据核-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>

使用:cloud sql JPA Datanucleous v2 SDK 1.7.6 Jre7

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

多谢你们。

4

1 回答 1

0

确定您正在使用哪个 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。

于 2013-04-29T16:01:00.453 回答