2

Web サービスは、サーブレットの内部実装です。また、Web/アプリ サーバーは、新しいスレッドごとに新しいリクエストを処理します。

これは、内部的に Web サービスの各要求が新しいスレッドで処理されることを意味します。ここで、このサービスには複数のコンシューマーがあると考えてください。すべてのコンシューマーが同時にプロバイダーにリクエストを送信している可能性があります。これは、このようなシナリオを克服するには、この Web サービスの実装がスレッドセーフである必要があることを意味します。

メンバー変数を持たないことで Web サービスがスレッドセーフになることはすでにわかっています。ただし、メンバー変数を使用する必要があり、これらの変数は Spring Bean を介して注入されます。

それらをスレッドセーフにする方法について何か提案はありますか?

編集:

定義上、スレッド セーフなクラスである class1 が、スレッド セーフではない別のクラスのオブジェクトを使用している場合、class1 はよりスレッド セーフになります。

私の要点は、Spring Bean の使用は既に私のサービスで行われており、今はそれらをスレッドセーフにしたいということです。これに関する提案。

内部的には http リクエストとレスポンではなく jms メッセージを使用しているため、リクエスト スコープを考えることはできません。これに関するアイデアはありますか?

4

1 に答える 1

2

呼び出しはSpring Beanを介して行われるため、スコープ付きBeanをリクエストするにはSpring Beanを作成する必要があります.これは、Spring APIからそのようなBeanを作成する方法です. http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-request .リクエスト Bean の実装はスレッドセーフで、ThreadLocal を使用します。オブジェクトを内部的に実装します。

また、この問題に対処する興味深いスレッドがここにあります。

ThreadLocals をスプリング注入シングルトンに配置する必要がありますか?

これがうまくいくことを願っています。

于 2012-04-13T06:32:25.813 に答える