2012-06-21 38 views
7

Tôi đang sử dụng Google App Engine (appengine-java-sdk-1.6.6) cho một ứng dụng sử dụng JDO và maven (maven-gae-plugin) cho dự án cấu trúc và xây dựng. Việc xây dựng thành công cùng với việc tăng cường các lớp miền của tôi với DataNucleus Enhancer.Lớp org.datanucleus.api.jdo.PersistenceManagerFactoryClass không được tìm thấy

Khi chạy ứng dụng, tôi đang gặp vấn đề này: Class org.datanucleus.api.jdo.PersistenceManagerFactoryClass không được tìm thấy. Bất cứ ai có thể xin vui lòng tư vấn cho. Cảm ơn

PS: Tôi đã thực hiện một grep (trên Linux) để tìm PersistenceManagerFactoryClass trong thư mục SDK của APP Engine, tôi không thể tìm thấy nó.

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

tôi có thay đổi javax.jdo.PersistenceManagerFactoryClass tài sản với giá trị org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory và nó hoạt động tốt. –

+0

Vì vậy, bạn đang sử dụng v1 của plugin GAE JDO. Rõ ràng đó là cổ đại như vậy sẽ có khả năng nhấn vấn đề sau này. Tốt hơn để sử dụng v2 của plugin đó – DataNucleus

+0

@DataNucleus Cảm ơn bạn đã trả lời. Tôi đã di chuyển từ v1 đến v2 và sử dụng cấu hình từ Google (https://developers.google.com/appengine/docs/java/datastore/jdo/overview-dn2#Creating_the_jdoconfig_xml_File), có cùng sự cố "Class org. datanucleus.api.jdo.PersistenceManagerFactoryClass không được tìm thấy ". –

Trả lời

3

Trong trường hợp của tôi, tôi đã sử dụng DataNucleus-appengine- 2.1.2 thay vì DataNucleus-appengine- 1.0.10. Với phiên bản 2.1.2 bạn phải cập nhật jdconfig.xml của bạn với PersistenceManagerFactoryClass sau:

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

jdconfig.xml của tôi là:

<?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> 
Các vấn đề liên quan