Spring WS 2.1.0 で Web サービスを使用しています。Web サービスは Tomcat 7 で実行され、データベースからデータを読み取り、さまざまなレポートを生成する 1 つのトランザクション メソッドを持つエンドポイントを実装します。Tomcat 7 は、JServ プロトコルを介して Apache サーバーの背後で実行されます。
Apache JMeter を介したストレス テスト中に、同時リクエストは連続して処理されるという結論に達しました。最初に、データベース接続プール (commons-dbcp 以降の tomcat-jdbc) を調整しようとしましたが、結果は同じでした。エンドポイント メソッドはデータの読み取りのみを行うため、書き込み後の読み取りまたは読み取り後の書き込みの依存関係はなく、トランザクションは並列で処理できます。したがって、問題は HTTP 接続の処理にあります。
いくつかの検索 (およびもちろんグーグル) の後、Spring WS にはシングルスレッドのデフォルトの接続マネージャー (SimpleHttpConnectionManager) が付属していることがわかりました。SimpleHttpConnectionManager を MultiThreadedHttpConnectionManager に置き換えることをお勧めします。次のようなサンプル コードを見つけました。
<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
<constructor-arg>
<bean class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager>
<property name="maxConnectionsPerHost" value="20"/>
<property name="maxTotalConnections" value="100"/>
</bean>
</constructor-arg>
</bean>
しかし、Spring が HttpClient をどのように使用するか (ID を参照するか、それを自動配線するか) を理解していないため、この例は私にはあまり明確ではありません。では、私の場合、Spring で MultiThreadedHttpConnectionManager を使用するにはどうすればよいでしょうか? このクラスの構成済みインスタンスをどこに注入すればよいですか?