0

現在、PersistenceContext のデータを更新する際に問題が発生しています。BMT EJB3 Bean を呼び出す CMT EJB3 Bean があります。BMT Bean では、オブジェクトに対していくつかのプロセス ロジックを実行します。変更をコミットすると、データベースの変更を確認できます。

BMT メソッドでプロセスが終了したら、CMT Bean に戻ります。PersistenceContext からオブジェクトを再フェッチ (.find() メソッド) しましたが (BMT Bean がいくつかの値を変更したため)、まだオブジェクトの古い値を取得しています。.refresh() メソッドも試しましたが、データが更新されません。

CMT および BMT Bean が異なる PersistenceContext を使用している可能性はありますか?

4

1 に答える 1

1

永続コンテキストは、実行中のトランザクションを介して伝播されます。通常の永続コンテキスト (拡張されていないなど) の場合に加えて、その L1 キャッシュの有効期間は同じトランザクションに限定されます。

したがって、BMT Bean で新しいトランザクションを開始し、その永続コンテキストと対話してからコミットすると、実際には、呼び出し元の CMT Bean の永続コンテキストに更新された値がありません。

ただし、DB から新しい値を読み取ることは機能するはずです。したがって、DB にこれらの変更が見られ、特に CMT Bean と BMT Bean の両方が同じアプリケーションにデプロイされている場合 (したがって、L2 不整合の影響がない場合)、refresh実際には機能するはずです。

CMT Bean への新しい呼び出しで何が起こるか? その後、更新された値が表示されますか?

于 2012-05-26T08:56:41.617 に答える