【问题标题】:Where to declare JDO Singleton PersistenceManagerFactory with multiple services在哪里声明具有多个服务的 JDO Singleton PersistenceManagerFactory
【发布时间】: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


【解决方案1】:

PMF 类应该是顶级类,而不是内部类。

通常是site.server.PMF

【讨论】:

  • @Zach 我很好奇。这是您的问题所在,还是只是帮助您解决了其他问题?
  • 总的来说,我对如何使用单例、如何实例化等感到困惑。您的帖子帮助我理解了单例生态系统。
猜你喜欢
  • 2017-12-18
  • 2011-07-24
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-30
相关资源
最近更新 更多