未找到类 org.datanucleus.api.jdo.PersistenceManagerFactoryClass

Posted

技术标签:

【中文标题】未找到类 org.datanucleus.api.jdo.PersistenceManagerFactoryClass【英文标题】:Class org.datanucleus.api.jdo.PersistenceManagerFactoryClass was not found 【发布时间】:2012-06-24 01:48:05 【问题描述】:

我将 Google App Engine (appengine-java-sdk-1.6.6) 用于使用 JDO 和 maven (maven-gae-plugin) 用于项目结构和构建的应用程序。构建成功并使用 DataNucleus Enhancer 增强了我的域类。

运行应用程序时,我遇到了这个问题:Class org.datanucleus.api.jdo.PersistenceManagerFactoryClass was not found。任何人都可以请建议。谢谢

PS:我已经做了一个grep(在linux上)在APP Engine SDK文件夹中找到PersistenceManagerFactoryClass,我找不到它。

Could not instantiate bean class [com.peerbuccoss.apps.mtp.dao.impl.CommonDaoImpl]:  Constructor threw exception; nested exception is javax.jdo.JDOFatalUserException: Class     org.datanucleus.api.jdo.PersistenceManagerFactoryClass was not found.
NestedThrowables:
java.lang.ClassNotFoundException:     org.datanucleus.api.jdo.PersistenceManagerFactoryClass:
java.lang.ClassNotFoundException: org.datanucleus.api.jdo.PersistenceManagerFactoryClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at javax.jdo.JDOHelper$18.run(JDOHelper.java:2018)
at javax.jdo.JDOHelper$18.run(JDOHelper.java:2017)
at java.security.AccessController.doPrivileged(Native Method)
at javax.jdo.JDOHelper.forName(JDOHelper.java:2015)
at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1162)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:1093)
at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:919)

【问题讨论】:

我已经用值 org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory 更改了属性 javax.jdo.PersistenceManagerFactoryClass 并且它工作正常。 所以您使用的是 GAE JDO 插件的 v1。显然这是古老的,所以以后可能会遇到问题。最好使用该插件的 v2 @DataNucleus 感谢您的回复。我已经从 v1 迁移到 v2 并使用来自 Google (developers.google.com/appengine/docs/java/datastore/jdo/…) 的配置,我遇到了同样的问题“找不到类 org.datanucleus.api.jdo.PersistenceManagerFactoryClass”。 Google 的笔记有误/不完整。您需要关注code.google.com/p/datanucleus-appengine/wiki/… 为什么他们没有包含您必须询问他们的完整说明... @DataNucleus 我将通过它并在完成后发布更新。谢谢 【参考方案1】:

就我而言,我使用的是 datanucleus-appengine-2.1.2 而不是 datanucleus-appengine-1.0.10。对于 2.1.2 版,您必须使用以下 PersistenceManagerFactoryClass 更新您的 jdconfig.xml:

<property name="javax.jdo.PersistenceManagerFactoryClass"
       value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory"/>

我的 jdconfig.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>
</jdoconfig>

【讨论】:

以上是关于未找到类 org.datanucleus.api.jdo.PersistenceManagerFactoryClass的主要内容,如果未能解决你的问题,请参考以下文章

Class org.datanucleus.api.jdo.JDOPersistenceManagerFactory was not found

致命错误:未捕获的错误:未找到“Omnipay\Omnipay”类

laravel 类 'GuzzleHttp\Client' 未找到

致命错误:未捕获的错误:未找到类“用户名”

未找到 WindowsAnsiOutputStream 类

未找到“嘲弄”类