2011-08-10 28 views
1

私はspring-wsクライアントを使用して双方向SSLモードでWebサービスを呼び出しています。毎回新しい接続を作成しないようにする必要があります。代わりに接続を再利用します。 私はいくつかの再検索を行い、デフォルトでHTTP 1.1が常に永続的なhttp(s)接続を作成することを発見しました。本当?spring-wsクライアントを使用して永続的な接続を作成する

は、私は接続が永続的であることを確認するために私のクライアントのコードのどの部分が必要ですか?接続が永続的かどうか、または新しい接続が作成されているかどうかを確認するにはどうすればいいですか?

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oxm="http://www.springframework.org/schema/oxm" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd"> 

    <bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/> 
    <bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> 
     <constructor-arg ref="messageFactory"/> 
     <property name="marshaller" ref="jaxb2Marshaller" /> 
     <property name="unmarshaller" ref="jaxb2Marshaller" /> 
     <property name="messageSender" ref="httpSender" /> 
    </bean> 

    <bean id="httpSender" class="org.springframework.ws.transport.http.CommonsHttpMessageSender"> 
    </bean> 

    <oxm:jaxb2-marshaller id="jaxb2Marshaller" contextPath="com.nordstrom.direct.oms.webservices.addressval" /> 

    <bean id="Client" class="test.ClientStub"> 
      <property name="webServiceTemplate" ref="webServiceTemplate" />  
    </bean> 
</beans> 

答えて

1

HTTP/1.1接続キープアライブが、サーバーが要求の数の後に、それを閉じるために決めることができるか、キープアライブ

チェックする最も簡単な方法は、tcpdumpのかwiresharkのを使用することですサポートしていません持っていますSYN [S]フラグをチェックしてください。 Thats新しい接続。

私は以下を使用していますが、J2SE 1.6 jdkでは複数のリクエストに新しいソケットが作成されませんでした。サーバーはConnection:Keep-Aliveヘッダーを送信しませんでしたが、とにかく接続は維持されました。

ビーン構成

<bean id="wsHttpClient" factory-bean="customHttpClient" 
    factory-method="getHttpClient" /> 


<bean id="messageSender" 
     class="org.springframework.ws.transport.http.CommonsHttpMessageSender" 
     p:httpClient-ref="wsHttpClient" /> 

Javaコード

import org.apache.commons.httpclient.*; 

import org.springframework.stereotype.*; 

@Component public class CustomHttpClient { 

    private final HttpClient httpClient; 

    public CustomHttpClient() { 
     httpClient = new HttpClient(new MultiThreadedHttpConnectionManager()); 
     httpClient.getParams().setParameter("http.protocol.content-charset", 
      "UTF-8"); 
     httpClient.getHttpConnectionManager().getParams() 
      .setConnectionTimeout(60000); 
     httpClient.getHttpConnectionManager().getParams().setSoTimeout(60000); 
     httpClient.setHostConfiguration(new HostConfiguration()); 
    } 

    public HttpClient getHttpClient() { 
     return httpClient; 
    } 
}