【问题标题】:Persistence Manager modifying object even closed?持久性管理器修改对象甚至关闭?
【发布时间】:2011-10-25 13:04:51
【问题描述】:

最近看到有人写了这段代码,其中Courses是一个静态对象,持有1个PersistenceManager实例。

public class Courses {
    private PersistenceManager pm;

    private static Courses instance = null;

    public Courses() {
        pm = PMF.get().getPersistenceManager();
    }

    public static Courses inst() {
        if (instance == null)
            instance = new Courses();
        return instance;
    }

    public void addCourse(String ID, String name)  {
        Course course = new Course(ID, name, coordinatorID);
        pm.makePersistent(course);
        pm.close();
    }
}

此代码有效。

我的问题是,由于只有 1 个持久化管理器实例,当第二个 addCourse 请求进来时,不是 pm 已经关闭了吗?为什么还能持久化对象?

我大致知道 GAE 使用 Jetty Server。与 Apache 不同的是,Jetty 会为每个传入的请求生成一个新线程。这与这幅图有什么关系?

【问题讨论】:

    标签: google-app-engine servlets persistence jetty datanucleus


    【解决方案1】:
    public Courses() {
        pm = PMF.get().getPersistenceManager();
    }
    

    当您创建课程时,它会“重新创建”下午。 以便您可以使用它。

    public void addCourse(String ID, String name)  {
        Course course = new Course(ID, name, coordinatorID);
        pm.makePersistent(course);
        pm.close();
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-15
      • 2016-08-14
      • 2011-03-23
      • 2011-07-17
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多