Объект Persistence Manager, изменяющий объект, даже закрыт?

Недавно я видел, как кто-то пишет этот фрагмент кода, в котором 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 создает новый поток для каждого входящего запроса. Как это вписывается в эту картину?


person huy    schedule 12.08.2011    source источник


Ответы (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();
}
person Cesar    schedule 12.10.2011