3

Я пытаюсь написать приложение Vaadin на платформе GAE с помощью JDO, и когда я хочу вызвать этот метод:Ошибка при принятии объекта настойчивый

public void createUser(String login, String password, String email) { 
    PersistenceManager pm = PMF.get().getPersistenceManager(); 
    User user = new User(login, password, email); 
    try { 
     pm.makePersistent(user); 
    } finally { 
     pm.close(); 
    } 

} 

Я получаю эту ошибку:

(...)Caused by: javax.jdo.JDOFatalUserException: A property named javax.jdo.PersistenceManagerFactoryClass must be specified, or a jar file with a META-INF/services/javax.jdo.PersistenceManagerFactory entry must be in the classpath, or a property named javax.jdo.option.PersistenceUnitName must be specified. NestedThrowables: javax.jdo.JDOUserException: You have either specified for this PMF to use a "persistence-unit" of "transactions-optional" (yet this doesnt exist!) or you called JDOHelper.getPersistenceManagerFactory with "transactions-optional" as the name of a properties file (and this doesnt exist in the CLASSPATH) at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:856) at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:1092) at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:914) at myapp.PMF.(PMF.java:8) ... 43 more Caused by: javax.jdo.JDOUserException: You have either specified for this PMF to use a "persistence-unit" of "transactions-optional" (yet this doesnt exist!) or you called JDOHelper.getPersistenceManagerFactory with "transactions-optional" as the name of a properties file (and this doesnt exist in the CLASSPATH) (...)

Я искал Google и нашел некоторые решения для этой проблемы, но никто не работает для моего приложения (или я делаю что-то неправильно). Для примера. this не работает. О, и у меня есть файл jdoconfig.xml в META-INF. Если у кого-то была схожая проблема, и он хотел бы поделиться своей мудростью, я был бы очень признателен.

EDIT: 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> 
+0

и вы не сказали нам о своем jdoconfig.xml или persistence.xml файл, и где они расположены – DataNucleus

+0

я сказал: у меня есть jdoconfig.xml файл в META-INF. – user1173656

ответ

6

Понял!

jdoconfig.xml

файл был в

\war\META-INF

каталог, который создал Eclipse. Должно быть в

\war\WEB-INF\classes\META-INF

Тупой ошибка ...

+1

где этот военный каталог? Я искал какое-то решение и не вижу этого каталога в моем приложении, а также в моем каталоге конечных точек – user198923

+0

на самом деле в вашем проекте вам нужно создать подпапку «classes» в разделе «WEB-INF» и «META-INF» 'в подпапках под «классами». Это не глупая ошибка, из учебного пособия по GAE я неправильно понял, что мне нужно создать папку META-INF на том же уровне, что и WEB-IF (поскольку она работает в большинстве веб-проектов, но не здесь с jdoconf JDO. XML). –

Смежные вопросы