スタブは、Axis2 1.5.4 スレッドセーフを介して (XMLBeans バインディング オプションを使用して) WSDL2JAVA によって生成されますか?
実際、複数のスレッドを介して呼び出す Web サービス用に 1 つのスタブを作成しました。私は自分自身を構成し、同様MultiThreadedHttpConnectionmanager
に設定しましたが、各呼び出しの後に呼び出す NullPointerExceptions がいくつか見られます。HTTPConstants.REUSE_HTTP_CLIENT
stub._getServiceClient().cleanupTransport
スレッドがハングすることもあります。
同時に、Web サービスの操作メソッドで生成された Stub で、finally ブロックで cleanup() が既に呼び出されていることに気付きました。stub._getServiceClient().cleanupTransport
後で自分に電話しない方がいいですか?
私のコード:
httpConnMgr = new MultiThreadedHttpConnectionManager();
HttpConnectionManagerParams params = httpConnMgr.getParams();
if (params == null) {
params = new HttpConnectionManagerParams();
}
params.setDefaultMaxConnectionsPerHost(numberOfThreads);
httpConnMgr.setParams(params);
HttpClient httpClient = new HttpClient(httpConnMgr);
service = new Service1Stub(this.endPointAddress);
service._getServiceClient().getOptions()
.setTimeOutInMilliSeconds(this.timeOut);
service._getServiceClient().getOptions()
.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, Boolean.TRUE);
service._getServiceClient().getOptions()
.setProperty(HTTPConstants.AUTO_RELEASE_CONNECTION, Boolean.FALSE);
service._getServiceClient()
.getOptions()
.setProperty(HTTPConstants.SO_TIMEOUT, (int) (this.timeOut));
service._getServiceClient()
.getOptions()
.setProperty(HTTPConstants.CONNECTION_TIMEOUT,
(int) (this.timeOut));
service._getServiceClient().getServiceContext().getConfigurationContext()
.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);
一方、生成されたスタブでは、cleanUp が既に呼び出されていることに気付きました。
finally {
_messageContext.getTransportOut().getSender().cleanup(_messageContext);
}
どんな提案でも大いに役に立ちます。ありがとう。