3

(1) わかりました、JAX-WS Java Web サービスのスレッド化モデルについてかなり混乱しています。私はそれらがスレッドセーフではないことを読みました。では、複数の並列リクエストをどのように処理するのでしょうか? 常に (ほとんどの場合) 既知であることを考えると、複数のクライアントから同時に呼び出されることになります。

(2) アプリ サーバーは、リクエストごとに Web サービスの新しいインスタンスを作成しますか (ステートレス セッション Bean のプールを維持し、リクエストに 1 つを割り当て、リクエストが完了するとプールに返されるように)。アプリケーション サーバー コンソール (GlassFish または JBoss または WebSphere) でそのプール サイズを構成できますか。

(3) また、リクエストごとに新しいスレッドを作成する @Threadsope アノテーションについても知りました。
http://jax-ws-commons.java.net/thread-scope/
それは良いオプションですか? 他の標準的な方法でスレッドセーフと並列リクエストの問題を解決している人がいると確信しています-アドバイスしてください。

4

1 に答える 1

1

アプリケーション サーバーには、Bean のプールが含まれています。
ステートレス セッション Bean を使用する場合、セッションを使用して同じインスタンスを取得できるとは限りません。
ただし、前述したように、Bean はプールによって管理され、その中に状態を保持することはお勧めできません。
ただし、EJB Bean がユーザーのニーズと関係があるとは思いません。
提供した例では、DataService と接続の両方が要求ごとに作成されることに注意してください。これは少し高価です。
接続にのみ ThreadLocal API を使用することを検討し、接続プールから取得します。ThreadLocalについて読んだり、DB 接続プール
について読ん だりすることで、これらを独自に実装できます。


結論として、ここでは EJB は関係ないと思います。
スレッドローカルでサービスクラスとフィールドの両方を保持しないでください。リクエストごとに割り当てる必要のあるフィールドのみを保持してください。(あなたが示した例では、それは接続です)

于 2012-07-13T19:40:49.520 に答える