我正在尝试使用 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”的“persistence-unit”(但它不存在!),或者您使用“transactions-optional”调用 JDOHelper.getPersistenceManagerFactory 作为在 javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:1092) 在 javax.jdo.JDOHelper 的 javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:856) 的属性文件的名称(并且这在 CLASSPATH 中不存在) .
我搜索了谷歌并找到了一些解决这个问题的方法,但没有一个适用于我的应用程序(或者我做错了什么)。例如。这行不通。哦,我在 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>