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

时间:2010-04-22 05:42:37

标签: 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;
    }
}

但是在每个Service Implementation中执行类似的操作似乎最终会根据我收到的错误消息创建单例的唯一副本“应用程序代码尝试创建名为transactions-optional的PersistenceManagerFactory,但是已经存在此名称的一个!“

@Override
 public void addCategory(Category category) {
  PersistenceManager pm = PMF.get().getPersistenceManager();
  try {
        pm.makePersistent(category);
  } finally {
       pm.close();
     }
 }

所以基本上第一个调用addCategory的ServiceImpl很好,所有其他的都因上面的错误而失败。我在这里缺少一些重要的东西,我认为单例类的重点是创建一个静态的PersistenceManagerFactory。我非常感谢您对我所缺少的任何见解。

1 个答案:

答案 0 :(得分:0)

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

通常为site.server.PMF