我正在使用GWT,并且有4个需要PersistenceManagerFactory的服务实现。我遵循Google关于创建单例类的建议,但是我不确定应在服务器端代码中实例化并引用该类的位置。
这个班级看起来像这样
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;
public final class PMF {
private static final PersistenceManagerFactory pmfInstance =
JDOHelper.getPersistenceManagerFactory("transactions-optional");
private PMF() {}
public static PersistenceManagerFactory get() {
return pmfInstance;
}
}
但是在每个服务实现中执行类似的操作似乎最终会根据错误消息我创建单例的唯一副本:“应用程序代码试图创建一个名为transactions-optional的PersistenceManagerFactory,但是该名称已经存在!”
@Override
public void addCategory(Category category) {
PersistenceManager pm = PMF.get().getPersistenceManager();
try {
pm.makePersistent(category);
} finally {
pm.close();
}
}
因此,基本上,第一个调用addCategory的ServiceImpl很好,其他所有错误均因上述错误而失败。我在这里缺少了一些重要的东西,我认为单例类的重点是创建一个静态的PersistenceManagerFactory。非常感谢您对我所缺少的任何见解。
最佳答案
PMF类应该是顶级类,而不是内部类。
通常是它的site.server.PMF
。