Persistence Manager修改对象甚至关闭?

时间:2011-08-12 05:34:48

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

最近我看到有人写了这段代码,其中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();
    }
}

此代码有效。

我的问题是,由于只有一个持久性管理器实例,当第二个addCourse请求进入时,是不是pm已经关闭了?为什么它仍然可以持续存在?

我粗略地知道GAE使用Jetty Server。与Apache不同,Jetty会根据每个请求产生一个新线程。这样如何适应这张图片?

1 个答案:

答案 0 :(得分:1)

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

当你创建一个课程时,它会“重新创建”pm。 这样你就可以使用它了。

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