使对象持久化时出错

时间:2012-04-27 12:29:02

标签: google-app-engine persistence vaadin google-cloud-datastore jdo

我正在尝试使用JDO在GAE平台上编写Vaadin应用程序,当我想调用此方法时:

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();
    }

}

我收到此错误:

  

(...)引起:javax.jdo.JDOFatalUserException:必须指定名为javax.jdo.PersistenceManagerFactoryClass的属性,或者带有META-INF / services / javax.jdo.PersistenceManagerFactory条目的jar文件必须在必须指定类路径或名为javax.jdo.option.PersistenceUnitName的属性。   NestedThrowables:   javax.jdo.JDOUserException:您已为此PMF指定使用“transactions-optional”的“持久性单元”(但这不存在!)或者您使用“transactions-optional”作为名称来调用JDOHelper.getPersistenceManagerFactory属性文件(这不存在于CLASSPATH中)       在javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:856)       在javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:1092)       在javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:914)       at myapp.PMF。(PMF.java:8)       ......还有43个   引起:javax.jdo.JDOUserException:您已为此PMF指定使用“transactions-optional”的“持久性单元”(但这不存在!)或您使用“transactions-optional”调用JDOHelper.getPersistenceManagerFactory属性文件的名称(这在CLASSPATH中不存在)(...)

我搜索了Google并找到了解决此问题的方案,但没有一个适用于我的应用(或者我做错了什么)。 例如。this不起作用。哦,我在META-INF中有jdoconfig.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> 

1 个答案:

答案 0 :(得分:6)

知道了!

  

jdoconfig.xml

文件在

  

\战争\ META-INF

Eclipse创建的

目录。应该在

  

\战争\ WEB-INF \类\ META-INF

愚蠢的错误......