2012-04-13 14 views
2

Webサービスは内部的にServletを実装しています。そして、web/appサーバーは新しいスレッドごとに新しいリクエストを処理します。Webサービススレッドを安全にする方法

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

メンバー変数を持たないことで、Webサービスのスレッドを安全にすることがすでに分かっています。しかし、私はメンバ変数を使用する必要があり、これらの変数は春の豆を介して注入されます。

これらのスレッドを安全にする方法についてのご意見はありますか?

編集:定義により

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

私のポイントは私のサービスで既に行われている春の豆を使用していますが、今ではそれらをスレッドセーフにしたいと考えています。これに関する提案。

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

答えて

2

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

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

Should I put my ThreadLocals in a spring-injected singleton?

が、これがうまくお手伝いを願っています。

+0

class1のスレッドセーフクラスがスレッドセーフではない別のクラスのオブジェクトを使用している場合、class1はスレッドセーフになります。私のポイントは私のサービスですでに行われている春の豆を使用していますが、今はそれらをスレッドセーフにしたいと考えています。これに関する提案。 – neo

+0

あなたの努力はSpringから非スレッドセーフなクラスを呼び出すでしょうか? – UVM

+0

はい、これらのクラスがWebアプリケーションの一部である場合内部的には、http要求と応答ではなくjmsメッセージを使用しているため、リクエスト範囲について考えることはできません。これに関するアイデア? – neo

関連する問題