2011-07-07 14 views
1

私は、スプリングで構成されたジャージクライアントのシングルトンインスタンスを使用しています。複数のスレッドがそれぞれクライアント上に異なる認証フィルタを設定しています。ドキュメントによるとジャージクライアントのフィルタスレッドの安全性

http://jersey.java.net/nonav/apidocs/1.3/jersey/com/sun/jersey/api/client/Client.html

フィルタの設定がスレッドセーフであることが保証されていないため、他のスレッドが同時にフィルタを設定したときにスレッドA自体が認証されることは保証されません。

スレッドごとに新しいクライアントを作成する以外にも、この問題の回避策がありますか?私はこれが高価な操作であるので、これを避けたいと思います。

答えて

2

この方法で複数のスレッドで単一のクライアントを安全に使用できるとは思いません。クライアントのプールを作成し、各スレッドがプールからクライアントを借用し、適切な認証フィルタを設定してから、クライアントをプールに戻す前にフィルタをクリアするようにしてください。

Apache commonsには、このためにうまくいくpoolコンポーネントがあります。

+0

優れた提案 - ありがとうございます。 [オブジェクトプーリング用のSpring AOP API](http://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/aop-api.html#aop-ts-pool)を試してみます。フードの下でApacheコモンズプールを使用します。 –