eコマースアプリケーションを開発しています。そのために、各顧客がカート情報を維持するためのセッションを作成したいと考えています。
通常の Java EE プロジェクトであればHttpSession session = request.getSession();
、すべてのカート情報を使用してそのセッションに追加します。
私の質問は EJB プロジェクトです。上記の目的でセッションを作成する手順は何ですか?
eコマースアプリケーションを開発しています。そのために、各顧客がカート情報を維持するためのセッションを作成したいと考えています。
通常の Java EE プロジェクトであればHttpSession session = request.getSession();
、すべてのカート情報を使用してそのセッションに追加します。
私の質問は EJB プロジェクトです。上記の目的でセッションを作成する手順は何ですか?
リモート EJB は HTTP/サーブレットとは異なり、コンテナーは何らかの種類のマップを送信し続ける識別情報に関連付けるのではなく、代わりにクライアントがセッションを維持するステートフル Bean に基づいています。
サーバーのエッジとしてステートフル セッション Bean (SFSB) を使用する場合、Bean がセッションになります。この Bean から、セッション状態を保持できる Map やその他の任意の量の Bean などを参照できます。
CDI リクエスト スコープを使用すると、リクエスト スコープ Bean をコール チェーンの任意の他の Bean に注入できます。これは http リクエストと同じように機能します。このように機能するセッション スコープはありませんが、ファサード Bean から、前述の Map をリクエスト スコープ Bean に入れることができます。この Bean を注入するか、プロデューサー メソッドを使用すると、実質的に同等の http セッション マップが得られます。
EJB は、同じ場所または別の場所で独立して実行されるビジネス ロジックに他なりません。
誰がロジックを呼び出しているかはわかりません。その場合、セッションという言葉はここには収まりません。
ステートフル セッション Bean を使用してEJB セッション Bean の状態を維持するとは別の方法で呼び出すことができます。
インスタンス変数を持つセッション Bean に他なりません。インスタンスを受け取ると、Bean に属性の値を割り当てることができます
これは通常、トランザクションを追跡して維持する必要があるオンライン ショッピングで使用されます。
「EJB プロジェクト」とは、アプリケーションへのエントリが、RMI を使用してリモート クライアント経由で接続される EJB Bean であることを意味する場合、答えは、エントリ呼び出しにステートフル セッション Bean を使用することです。
クライアントは、サーバーからこの特定の Bean を要求する必要があり (これは通常、リモート JNDI ルックアップを介して行われます)、参照を保持するだけです。このまったく同じ参照で呼び出しが行われるたびに、サーバー側で同じ Bean インスタンスに移動します。
サーブレット セッション : サーブレット内のセッションは、リクエスト オブジェクトを通じて取得される HttpSession オブジェクトを通じてサーブレット コンテナによって維持されます。新しい HttpSession オブジェクトを実際にインスタンス化することはできません。これにはビジネス ロジックは含まれていませんが、オブジェクトを格納するための場所にすぎません。
EJB セッション : EJB のセッションは、SessionBeans を使用して維持されます。ビジネス ロジックを含めることができ、クライアントが使用できる Bean を設計します。ステートフルとステートレスの 2 つの異なるセッション Bean があります。最初のものは、何らかの形で単一のクライアントに接続されています。そのクライアントの状態を維持し、そのクライアントのみが使用でき、クライアントが「死ぬ」と、セッション Bean は「失われます」。
SessionBean をいつ使用するか
http://docs.oracle.com/javaee/6/tutorial/doc/gipjg.html#gipmt
SessionBean の作成方法