【问题标题】:GAE/JDO - jdopersistencemanagerfactory was not foundGAE/JDO - 未找到 jdopersistencemanagerfactory
【发布时间】:2014-10-31 12:38:42
【问题描述】:

首先,这是我第一次来这里,我来自巴西,还想提前感谢所有可以帮助我的人。此外,这是我第一次使用 GAE,我真的很喜欢这项服务。我使用 GAE 已经有一段时间了,并且使用 GAE 非常成功。

我正在尝试在 GAE 中进行持久性,错误我有错误:

javax.jdo.JDOFatalUserException:类 org.datanucleus.api.jdo .JDOPersistenceManagerFactory 未找到。

我的追踪器:

    [INFO] set 07, 2014 12:03:28 PM com.google.api.server.spi.SystemServiceServlet i
nit
[INFO] INFORMAÇÕES: SPI restricted: true
[INFO] set 07, 2014 12:03:34 PM com.google.api.server.spi.SystemService invokeSe
rviceMethod
[INFO] INFORMAÇÕES: cause={0}
[INFO] java.lang.ExceptionInInitializerError
[INFO]  at com.ufscar.Greetings.listGreeting(Greetings.java:47)
[INFO]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[INFO]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:62)
[INFO]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
[INFO]  at java.lang.reflect.Method.invoke(Method.java:483)
[INFO]  at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemSer
vice.java:359)
[INFO]  at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceS
ervlet.java:160)
[INFO]  at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceSe
rvlet.java:118)
[INFO]  at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
[INFO]  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[INFO]  at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511
)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1166)
[INFO]  at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocke
tFilter.java:74)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.appengine.tools.development.ResponseRewriterFilter.doFilte
r(ResponseRewriterFilter.java:127)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.appengine.tools.development.HeaderVerificationFilter.doFil
ter(HeaderVerificationFilter.java:34)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(Serve
BlobFilter.java:63)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
(TransactionCleanupFilter.java:43)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.appengine.tools.development.StaticFileFilter.doFilter(Stat
icFileFilter.java:125)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.appengine.tools.development.DevAppServerModulesFilter.doDi
rectRequest(DevAppServerModulesFilter.java:366)
[INFO]  at com.google.appengine.tools.development.DevAppServerModulesFilter.doDi
rectModuleRequest(DevAppServerModulesFilter.java:349)
[INFO]  at com.google.appengine.tools.development.DevAppServerModulesFilter.doFi
lter(DevAppServerModulesFilter.java:116)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:3
88)
[INFO]  at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.jav
a:216)
[INFO]  at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:1
82)
[INFO]  at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:7
65)
[INFO]  at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)

[INFO]  at com.google.appengine.tools.development.DevAppEngineWebAppContext.hand
le(DevAppEngineWebAppContext.java:98)
[INFO]  at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1
52)
[INFO]  at com.google.appengine.tools.development.JettyContainerService$ApiProxy
Handler.handle(JettyContainerService.java:491)
[INFO]  at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1
52)
[INFO]  at org.mortbay.jetty.Server.handle(Server.java:326)
[INFO]  at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:54
2)
[INFO]  at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnectio
n.java:938)
[INFO]  at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
[INFO]  at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
[INFO]  at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
[INFO]  at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.ja
va:409)
[INFO]  at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.j
ava:582)
[INFO] Caused by: javax.jdo.JDOFatalUserException: Class org.datanucleus.api.jdo
.JDOPersistenceManagerFactory was not found.
[INFO] NestedThrowables:
[INFO] java.lang.ClassNotFoundException: org.datanucleus.api.jdo.JDOPersistenceM
anagerFactory
[INFO]  at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementatio
n(JDOHelper.java:1175)
[INFO]  at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808)
[INFO]  at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:1093)

[INFO]  at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:919)
[INFO]  at com.ufscar.PMF.<clinit>(PMF.java:8)
[INFO]  ... 45 more
[INFO] Caused by: java.lang.ClassNotFoundException: org.datanucleus.api.jdo.JDOP
ersistenceManagerFactory
[INFO]  at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
[INFO]  at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
[INFO]  at java.security.AccessController.doPrivileged(Native Method)
[INFO]  at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
[INFO]  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[INFO]  at com.google.appengine.tools.development.IsolatedAppClassLoader.loadCla
ss(IsolatedAppClassLoader.java:216)
[INFO]  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[INFO]  at java.lang.Class.forName0(Native Method)
[INFO]  at java.lang.Class.forName(Class.java:340)
[INFO]  at javax.jdo.JDOHelper$18.run(JDOHelper.java:2018)
[INFO]  at javax.jdo.JDOHelper$18.run(JDOHelper.java:2016)
[INFO]  at java.security.AccessController.doPrivileged(Native Method)
[INFO]  at javax.jdo.JDOHelper.forName(JDOHelper.java:2015)
[INFO]  at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementatio
n(JDOHelper.java:1162)
[INFO]  ... 49 more
[INFO]
[INFO] set 07, 2014 12:03:34 PM com.google.api.server.spi.SystemService invokeSe
rviceMethod
[INFO] GRAVE: null
[INFO] java.lang.ExceptionInInitializerError
[INFO]  at com.ufscar.Greetings.listGreeting(Greetings.java:47)
[INFO]  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[INFO]  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:62)
[INFO]  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
[INFO]  at java.lang.reflect.Method.invoke(Method.java:483)
[INFO]  at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemSer
vice.java:359)
[INFO]  at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceS
ervlet.java:160)
[INFO]  at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceSe
rvlet.java:118)
[INFO]  at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
[INFO]  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[INFO]  at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511
)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1166)
[INFO]  at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocke
tFilter.java:74)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.appengine.tools.development.ResponseRewriterFilter.doFilte
r(ResponseRewriterFilter.java:127)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.appengine.tools.development.HeaderVerificationFilter.doFil
ter(HeaderVerificationFilter.java:34)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(Serve
BlobFilter.java:63)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter
(TransactionCleanupFilter.java:43)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.appengine.tools.development.StaticFileFilter.doFilter(Stat
icFileFilter.java:125)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at com.google.appengine.tools.development.DevAppServerModulesFilter.doDi
rectRequest(DevAppServerModulesFilter.java:366)
[INFO]  at com.google.appengine.tools.development.DevAppServerModulesFilter.doDi
rectModuleRequest(DevAppServerModulesFilter.java:349)
[INFO]  at com.google.appengine.tools.development.DevAppServerModulesFilter.doFi
lter(DevAppServerModulesFilter.java:116)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(Servlet
Handler.java:1157)
[INFO]  at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:3
88)
[INFO]  at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.jav
a:216)
[INFO]  at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:1
82)
[INFO]  at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:7
65)
[INFO]  at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)

[INFO]  at com.google.appengine.tools.development.DevAppEngineWebAppContext.hand
le(DevAppEngineWebAppContext.java:98)
[INFO]  at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1
52)
[INFO]  at com.google.appengine.tools.development.JettyContainerService$ApiProxy
Handler.handle(JettyContainerService.java:491)
[INFO]  at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:1
52)
[INFO]  at org.mortbay.jetty.Server.handle(Server.java:326)
[INFO]  at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:54
2)
[INFO]  at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnectio
n.java:938)
[INFO]  at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
[INFO]  at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
[INFO]  at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
[INFO]  at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.ja
va:409)
[INFO]  at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.j
ava:582)
[INFO] Caused by: javax.jdo.JDOFatalUserException: Class org.datanucleus.api.jdo
.JDOPersistenceManagerFactory was not found.
[INFO] NestedThrowables:
[INFO] java.lang.ClassNotFoundException: org.datanucleus.api.jdo.JDOPersistenceM
anagerFactory
[INFO]  at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementatio
n(JDOHelper.java:1175)
[INFO]  at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808)
[INFO]  at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:1093)

[INFO]  at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:919)
[INFO]  at com.ufscar.PMF.<clinit>(PMF.java:8)
[INFO]  ... 45 more
[INFO] Caused by: java.lang.ClassNotFoundException: org.datanucleus.api.jdo.JDOP
ersistenceManagerFactory
[INFO]  at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
[INFO]  at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
[INFO]  at java.security.AccessController.doPrivileged(Native Method)
[INFO]  at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
[INFO]  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[INFO]  at com.google.appengine.tools.development.IsolatedAppClassLoader.loadCla
ss(IsolatedAppClassLoader.java:216)
[INFO]  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[INFO]  at java.lang.Class.forName0(Native Method)
[INFO]  at java.lang.Class.forName(Class.java:340)
[INFO]  at javax.jdo.JDOHelper$18.run(JDOHelper.java:2018)
[INFO]  at javax.jdo.JDOHelper$18.run(JDOHelper.java:2016)
[INFO]  at java.security.AccessController.doPrivileged(Native Method)
[INFO]  at javax.jdo.JDOHelper.forName(JDOHelper.java:2015)
[INFO]  at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementatio
n(JDOHelper.java:1162)
[INFO]  ... 49 more
[INFO]

我在哪里插入:

MyBean p = new MyBean(la,lo);

PersistenceManager pm = PMF.get().getPersistenceManager();


try{
    pm.makePersistent(p);

} finally {

    pm.close();
}

我正在使用 Maven,他在 META-INF 中附带了一个文件 persistence.xml,但我创建了一个 jdoconfig:

<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">


   <persistence-manager-factory name="transactions-optional">
       <property name="javax.jdo.PersistenceManagerFactoryClass"
           value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
       <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
       <property name="javax.jdo.option.NontransactionalRead" value="true"/>
       <property name="javax.jdo.option.NontransactionalWrite" value="true"/>
       <property name="javax.jdo.option.RetainValues" value="true"/>
       <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
   </persistence-manager-factory>
</jdoconfig>

pom.xml:

http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>

<groupId>com.ufscar</groupId>
<artifactId>tcc</artifactId>

<properties>
    <appengine.app.version>1</appengine.app.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<prerequisites>
    <maven>3.1.0</maven>
</prerequisites>

<dependencies>
    <!-- Compile/runtime dependencies -->
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-1.0-sdk</artifactId>
        <version>1.9.10</version>
    </dependency>
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-endpoints</artifactId>
        <version>1.9.10</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>
    <dependency>
        <groupId>javax.jdo</groupId>
        <artifactId>jdo-api</artifactId>
        <version>3.0.1</version>
    </dependency>

    <!-- Test Dependencies -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-testing</artifactId>
        <version>1.9.10</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-stubs</artifactId>
        <version>1.9.10</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <!-- for hot reload of the web application-->
    <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>versions-maven-plugin</artifactId>
            <version>2.1</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>display-dependency-updates</goal>
                        <goal>display-plugin-updates</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <version>3.1</version>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <webXml>${project.build.directory}/generated-sources/appengine-endpoints/WEB-INF/web.xml</webXml>
                <webResources>
                    <resource>
                        <!-- this is relative to the pom.xml directory -->
                        <directory>${project.build.directory}/generated-sources/appengine-endpoints</directory>
                        <!-- the list has a default value of ** -->
                        <includes>
                            <include>WEB-INF/*.discovery</include>
                            <include>WEB-INF/*.api</include>
                        </includes>
                    </resource>
                </webResources>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-maven-plugin</artifactId>
            <version>1.9.10</version>
            <configuration>
                <enableJarClasses>false</enableJarClasses>
                <!-- Comment in the below snippet to bind to all IPs instead of just localhost -->
                <!-- address>0.0.0.0</address>
                <port>8080</port -->
                <!-- Comment in the below snippet to enable local debugging with a remove debugger
                     like those included with Eclipse or IntelliJ -->
                <!-- jvmFlags>
                  <jvmFlag>-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n</jvmFlag>
                </jvmFlags -->
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>endpoints_get_discovery_doc</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
           <groupId>org.eclipse.m2e</groupId>
           <artifactId>lifecycle-mapping</artifactId>
           <version>1.0.0</version>
           <configuration>
              <lifecycleMappingMetadata>
                 <pluginExecutions>
                    <pluginExecution>
                       <pluginExecutionFilter>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-war-plugin</artifactId>
                          <versionRange>2.1.1</versionRange>
                          <goals>
                             <goal>exploded</goal>
                          </goals>
                       </pluginExecutionFilter>
                       <action>
                          <execute />
                       </action>
                    </pluginExecution>
                    <pluginExecution>
                       <pluginExecutionFilter>
                          <groupId>org.datanucleus</groupId>
                          <artifactId>maven-datanucleus-plugin</artifactId>
                          <versionRange>1.1.4</versionRange>
                          <goals>
                             <goal>enhance</goal>
                          </goals>
                       </pluginExecutionFilter>
                       <action>
                          <execute />
                       </action>
                    </pluginExecution>
                 </pluginExecutions>
              </lifecycleMappingMetadata>
           </configuration>
        </plugin>
    </plugins>
</build>

有人吗?

【问题讨论】:

  • 您发布的内容中没有 NoClassDefFoundError。原因是:javax.jdo.JDOFatalUserException:必须指定名为 javax.jdo.PersistenceManagerFactoryClass 的属性,或者具有 META-INF/services/javax.jdo.PersistenceManagerFactory 条目的 jar 文件必须在类路径中,或者必须指定名为 javax.jdo.option.PersistenceUnitName 的属性。那么为什么不关注消息呢?或者也许你只是不发布重要信息?
  • 嗨,比利,感谢您的关注,我对此感到非常困惑,抱歉。好吧,我今天开始了其他项目。现在我有这个错误 org.datanucleus.api.jdo.jdopersistencemanagerfactory is not found 我编辑了 thacer 和 pom.xml。你还能看到吗?

标签: google-app-engine maven jdo


【解决方案1】:

如果你坚持使用JDO with GAE/Datastore,你需要

org.datanucleus : datanucleus-core, datanucleus-api-jdo v3.1.x
com.google.appengine.orm : datanucleus-appengine v2.1.x

在增强时添加到该 datanucleus-enhancer v3.1.x(除非通过 maven 插件完成)

【讨论】:

    【解决方案2】:

    我通过输入项目属性 - Google - App Engine 并将 Datanucleus JDO/JPA 版本从未指定切换到 2 在 Eclipse 中解决了这个错误。 (如果这很重要,我的跟踪转储顶部的错误是 java.lang.ExceptionInInitializerError。)

    【讨论】:

      【解决方案3】:

      对不起,如果这有点晚了,但我已经在几个项目中使用 GAE 并且每次都遇到这个错误,因为它很容易在文档中遗漏。

      在应用程序war/WEB-INF/classes/META-INF/目录中,创建一个名为jdoconfig.xml的文件,内容如下;

      <?xml version="1.0" encoding="utf-8"?>
      <jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">
      
      <persistence-manager-factory name="transactions-optional">
          <property name="javax.jdo.PersistenceManagerFactoryClass"
              value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory"/>
          <property name="javax.jdo.option.ConnectionURL" value="appengine"/>
          <property name="javax.jdo.option.NontransactionalRead" value="true"/>
          <property name="javax.jdo.option.NontransactionalWrite" value="true"/>
          <property name="javax.jdo.option.RetainValues" value="true"/>
          <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
          <property name="datanucleus.appengine.singletonPMFForName" value="true"/>
      </persistence-manager-factory>
      

      `

      这指定了名为“transactions-optional”的 JDOPersistenceManagerFactory 实例

      在谷歌文档中- https://cloud.google.com/appengine/docs/java/datastore/jdo/overview-dn2#Creating_the_jdoconfig_xml_File

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-27
        • 1970-01-01
        • 1970-01-01
        • 2013-03-11
        • 2011-01-12
        • 2014-10-19
        • 1970-01-01
        相关资源
        最近更新 更多