Я пишу какое-то приложение для GlassFish 2.1.1 (насколько я знаю, JavaEE 5, JPA 1.0). У меня есть следующий код в моем сервлете (который я в основном позаимствовал из некоторого примера в Интернете):
@PersistenceContext(name = "persistence/em", unitName = "pu")
private EntityManager em;
@Resource
private UserTransaction utx;
@Override
protected void doPost(...) {
utx.begin();
. . . perform retrieving operations on em . . .
utx.rollback();
}
web.xml
содержит следующее:
<persistence-context-ref>
<persistence-context-ref-name>persistence/em</persistence-context-ref-name>
<persistence-unit-name>pu</persistence-unit-name>
</persistence-context-ref>
Проблема в том, что они не видят изменений, которые были сделаны в другой внешней транзакции. Грубо говоря, я делаю запрос к сервлету из веб-браузера, просматриваю данные, выполняю некоторые DML в консоли SQL, перезагружаю страницу сервлета - и он не показывает никаких изменений. Я пытался использовать много комбинаций em.flush
, utx.rollback
и em.joinTransaction
, но, похоже, это не принесло пользы.
Ситуация осложняется тем, что я полностью новичок в JPA, поэтому у меня нет четкого понимания того, как работает базовый механизм. Поэтому любая помощь и, что более важно, объяснения / ссылки на то, что там происходит, будут очень благодарны. Спасибо!