0

私は現在、基本的に Web サービスからメッセージを受信し、このメッセージの内容に基づいてダウンロード プロセスを開始する新しい EJB アプリケーションを作成しています。このアプリケーションは Glassfish 3.1.1 で動作します。

私の最初のアイデアは、Web サービスからメッセージを読み取り、ステートフル セッション Bean を使用してダウンロード自体を開始および処理するシングルトン Bean を作成することでした。シングルトンとステートフル Bean の間の変換状態 (ダウンロード ステータスなど) が必要なため、ステートフル Bean を使用する必要があります。

「問題」は、Web サービスから複数のメッセージを受信した場合、複数のダウンロードを並行して開始することになっていることです。もちろん、各ダウンロードには独自のコンテキストがあります。シングルトンからステートフル セッション Bean を呼び出す場合、常に同じ Bean を取得するので、どうすればこれを達成できるのでしょうか? 私が見る唯一の解決策は、シングルトンから作成および起動されるスレッドを使用することですが、これは EJB 仕様では許可されていません...

ご協力いただきありがとうございます !

4

2 に答える 2

1

ここにステートフル セッション Bean は必要ないと思います。ステートフル Bean のポイントは、特定のクライアントとの関係であるセッションのスコープ内で状態を維持することです。あなたの場合、クライアントごとに 1 つのダウンロードはありません (クライアントはありますか?)。これは、これが適切なスコープではないことを意味します。

複数のスレッドだけが必要な場合は、@Asynchronousメソッドでステートレス Bean を使用します。おそらく、シングルトンへのコールバックを使用してステータスの更新を処理する必要があります。

于 2012-01-04T09:37:58.937 に答える
0

ここでシングルトン Bean が必要なのはなぜですか? ステートフル セッション Bean だけでは不十分ですか? 同時ダウンロードが必要で、ステートフルが必要なのに、なぜシングルトンを使用するのでしょうか? もう少し説明していただけますか?

于 2012-01-04T09:17:40.020 に答える