1

環境

単純な Java EE 6 (JBoss AS 7.1) CRUD Web アプリ、@ Namedバッキング Bean、 JSF ページの@SessionScopeを使用:

質問

HTTP セッション状態を CDI Bean に保存するのが悪い考えである理由は何ですか? たとえば、ショッピング カートのアイテムをすぐそこに保存します。

コメント

SFSB は会話状態であるため、これを目的としていますが、実際に使用するのは簡単ではないことを読みました。また、別のオプションはHttpSessionオブジェクトだと思います。

また、それらが保持するパッシベーション/アクティベーションの利点についても認識しています。

4

2 に答える 2

3

HTTPセッションに使用される「セッション」と、特定のBean(この場合はステートフルBean)とのセッションに使用される「セッション」との間で混乱していると思います。

それらは異なる目的を果たしますが、重複することもあります。当初、SFSB とのセッションは非 HTTP リモート クライアント (アプレットおよび Swing アプリケーション) に使用されていました。ある意味では、HTTP セッションに相当する RMI であると言えます。

利用可能な HTTP セッションが既にある場合、この目的でステートフル セッション Bean を使用しても意味がなく、HTTP セッション スコープ Bean を使用した方がよいでしょう。

ただし、ステートフル セッション Bean には用途があります。たとえば、拡張永続コンテキストに対応でき、トランザクションの外で (楽観的) ロックを開いたままにしておくことができます。

Java EE 6 Web アプリケーションで使用する場合、ステートフル セッション Bean に HTTP セッション スコープを割り当てたいことがよくあります。そうしないと、Bean に内部セッションがあっても、通信に使用するプロキシ以外には接続されません。

以下も参照してください。

于 2012-12-15T12:16:03.373 に答える
2

SFSB のおそらく利点は次のとおりです。

  • SFSB はトランザクションです。
  • SFSB は非活性化/活性化できます。
  • SFSB は拡張永続コンテキストを有効にします。

これらの代償として、例外スキームがより複雑になり (ロールバック、非ロールバック例外など)、ライフサイクルも複雑になり、結果としてデバッグが必要になります。

通常、パッシベーション/アクティベーションは必要ありません。デザインをスケーラブルにするには、メモリに保存する量をできるだけ少なくします。通常、拡張永続コンテキストも必要ありません (ただし、用途はあります)。

ただし、リクエストはトランザクション方式で処理する必要があります。しかし、そのために SFSB は必要ありません。エラーと回復を自分で処理して、HttpSession が一貫していることを確認できます。ただし、必ずトランザクションを使用してバックエンドにアクセスしてください!

于 2012-12-17T08:08:46.787 に答える