0

wsdl2java で生成された Axis 2 (1.6.1) Java クライアントに取り組んでいます。

正常に動作しているようですが、時々次のエラーが発生します。

14:38:04,855 情報 [HTTPSender] URL に ViaPost を送信できません [...]

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:755)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)

これがマルチスレッドの問題である可能性があるかどうか疑問に思っており、この問題についていくつかの回答を得たいと考えています。HttpClient をキャッシュするスタブを使用します。HttpClient は MultiThreadedHttpConnectionManager を使用し、setDefaultMaxConnectionsPerHost を 20 に設定します。

関連する MultiThreadedHttpConnectionManager によって HttpClient がスレッドセーフになることを理解しています。問題は、Axis2 スタブで何が起こるかということです。スタブもスレッドセーフになりますか?

Axis スタブは設計上スレッドセーフではないと述べられている投稿を見たことがあります。その場合、マルチスレッド HttpClient を使用する利点は何ですか? Axis クライアント スタブがマルチスレッド環境で使用可能であることを確認するにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

0

「接続のリセット」エラーは、サーバーが予期せず接続を閉じたことを意味します。そのエラーが発生した場合、問題はクライアントではなくリモート サーバーにあります。

MultiThreadedHttpConnectionManager は、HTTP 接続用のマルチスレッド セーフなキャッシュです。キャッシュがボトルネックになることなく、複数のスレッドがキャッシュから接続を取得したり、接続をキャッシュに返したりできます。個々の HttpClient、または HttpClient を所有するスタブは、一度に 1 つのスレッドでのみ使用する必要があります。HttpClient はリモート サーバーへの実際の TCP 接続を所有し、その接続は一度に 1 つの進行中の要求のみをサポートします。

于 2012-06-30T10:11:12.313 に答える