【发布时间】:2010-04-22 05:42:37
【问题描述】:
我正在使用 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 类看起来是正确的。
-
您的 PMF 课程有多个副本吗?是内部类吗?
标签: java google-app-engine jdo