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>
問題は、em が別の外部トランザクションで行われた変更を認識しないことです。大まかに言うと、Web ブラウザからサーブレットにリクエストを送信し、データを表示し、SQL コンソールで DML を実行し、サーブレット ページをリロードしますが、何も変化がありません。em.flush
、 、 、utx.rollback
の多くの組み合わせを使用しようとしましem.joinTransaction
たが、効果がないようです。
私がJPAの初心者であるため、状況は複雑です。そのため、基礎となる機械がどのように機能するかを明確に理解していません。したがって、ヘルプと、さらに重要なことに、そこで何が起こっているかについての説明/リンクをいただければ幸いです。ありがとう!