6

JSF2 アプリケーション内で Open Session In View パターンについて話すのは理にかなっていますか? 私のアプリには、すべてのデータベース関連の処理を行うビジネス サービス EJB を呼び出す JSF2 マネージド Bean があります (DAO レイヤーがありますが、現時点では問題ありません)。

OSIV パターンを持つということは、Managed Bean が基礎となるセッションが開かれていることを何らかの方法で確認する必要があることを意味します。

私もJPAを使用しています。

4

1 に答える 1

2

理論的には、この問題はまったく同じです。何らかの方法で EntityManager のスコープを開いたままにしない限り、EJB を離れるとエンティティがデタッチされます。(これは、一般的なトピックに関する素晴らしい投稿です: JPA 実装パターン: 遅延読み込み)。

私が読んだブログ投稿から:

8) Open Entity Manager In View サポートはありません。 [...] EJB3 では、エンティティがトランザクション スコープの EntityManager を使用して Bean を離れると、エンティティは永続コンテキストから切り離され、遅延読み込みに依存しなくなります (実際、JPA 仕様ではそのような状況での動作を指定していません。ベンダー依存の例外がスローされます...) もちろん、拡張永続コンテキストでEntityManager を使用することもできます、必要な限りトランザクションと永続化コンテキストを保持します。ただし、この機能は SFSB でのみ使用できますが、DAO クラスは呼び出しを永続化レイヤーにディスパッチするだけなので、ステートレス サービスの典型的な例です。さらに、クライアントごとに専用の DAO Bean インスタンスを用意するのは、やり過ぎのようです。

しかし、それが本当に正しいかどうかはわかりません。私の理解では、を使用してトランザクションを開始およびコミットするサーブレット フィルターを作成できるはずですUserTransaction(OSIV の通常のフィルターのように)。その後、EJB はフィルタで開始されたトランザクションに参加し、EntityManager開いたままになります。私はそれをテストしていませんが、試してみることをお勧めします。

于 2010-06-30T18:33:15.333 に答える