最近我看到有人写了这段代码,其中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会根据每个请求产生一个新线程。这样如何适应这张图片?
答案 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();
}