java - 在哪里声明具有多个服务的 JDO Singleton PersistenceManagerFactory

标签 java google-app-engine jdo

我正在使用 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

关于java - 在哪里声明具有多个服务的 JDO Singleton PersistenceManagerFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2688473/

相关文章:

java - 使用 Spring Security 的注册表单

java - 如何从 java.sql.SQLException : Concurrent Modification 重试/恢复

java - 在 GAE/J JDO 中持久存储内部类的正确方法是什么?

java - 将第三方库与 netbeans 结合使用

java - 通过 UI Automator 查看器中的资源 ID 识别 espresso 中的元素

java - Appengine 自定义域有时会重定向到 google.com

google-app-engine - 需要一种更干净的方法来编写此方法来将数据输入到数据存储实体属性中,从而避免太多 'if statements' ?

google-app-engine - 如果页面部分更改,如何更新 url?

mysql - 禁用datanucleus中的自动增量?

java - 如何在Opengl ES中获得一个像素的透明颜色?