Сохранять диспетчер сохраняемости JDO вместо того, чтобы закрывать его?

Нужно ли вообще закрывать менеджер постоянства? Можете ли вы просто оставить один открытым и использовать его постоянно, то есть просто повторять этот шаблон:

Transaction tx = pm.currentTransaction();
try {
    tx.begin();
    // do stuff
    tx.commit();
} finally {
    if (tx.isActive()) tx.rollback();
}

Каковы недостатки этого? Кажется, это имеет смысл, поскольку вам никогда не понадобится «отсоединять» объекты из-за закрытия диспетчера постоянства?


person Jay    schedule 31.07.2010    source источник


Ответы (1)


Вы можете держать его открытым все время, если хотите. Основная проблема, которую следует учитывать, заключается в том, когда вы выполняете запросы на обновление, как быстро вы хотите, чтобы изменения вступили в силу. При закрытии менеджера постоянства эти изменения сохраняются немедленно, в то время как если вы не сделаете этого явным образом, хранилище данных сохранит ваши изменения по своему усмотрению. Если вы используете транзакции, это не имеет значения. Тем более, что минусов особо нет. При самой первой инициализации PM (первое использование после развертывания) возникают большие накладные расходы процессора + времени, но после этого открытие/закрытие PM практически бесплатно.

person Travis Webb    schedule 09.08.2010
comment
Есть ли способ заставить pm сохранять данные, помимо закрытия или совершения транзакции? - person Peter Recore; 09.08.2010
comment
Да, я думаю, вы также можете сделать flush(), но почему бы просто не использовать транзакции? - person Jay; 12.08.2010