2012-06-21 8 views
7

Ich verwende Google App Engine (appengine-java-sdk-1.6.6) für eine Anwendung mit JDO und Maven (Maven-gae-plugin) für das Projekt Struktur und Aufbau. Der Build ist erfolgreich und erweitert meine Domain-Klassen mit DataNucleus Enhancer.Klasse org.datanucleus.api.jdo.PersistenceManagerFactoryClass wurde nicht gefunden

Beim Ausführen der Anwendung habe ich dieses Problem: Class org.datanucleus.api.jdo.PersistenceManagerFactoryClass wurde nicht gefunden. Könnte jemand bitte beraten. Danke

PS: Ich habe einen Grep (auf Linux) gemacht, um die PersistenceManagerFactoryClass im APP Engine SDK Ordner zu finden, ich konnte es nicht finden.

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) 
+1

Ich habe die Eigenschaft javax.jdo.PersistenceManagerFactoryClass mit der Änderung Wert org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory und es funktioniert gut. –

+0

Sie verwenden also v1 des GAE JDO-Plugins. Offensichtlich ist das alt und wird wahrscheinlich später Probleme haben. Besser, v2 dieses Plugin zu verwenden – DataNucleus

+0

@DataNucleus Danke für Ihre Antwort. Ich habe von Version 1 zu Version 2 migriert und verwende die Konfiguration von Google (https://developers.google.com/appengine/docs/java/datastore/jdo/overview-dn2#Creating_the_jdoconfig_xml_File), habe das gleiche Problem "Class org. datanucleus.api.jdo.PersistenceManagerFactoryClass wurde nicht gefunden ". –

Antwort

3

In meinem Fall war ich Datanucleus-appengine- 2.1.2 statt Datanucleus-appengine- 1.0.10 verwenden. Mit 2.1.2 Version müssen Sie jdconfig.xml mit den folgenden PersistenceManagerFactoryClass aktualisieren:

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

Mein jdconfig.xml ist:

<?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> 
Verwandte Themen