Я работаю над клиентом Java Axis 2 (1.6.1), сгенерированным с помощью wsdl2java.Не удается отправитьViaPost - на клиенте Axis2
Это, кажется, работает хорошо, но время от времени я получаю следующее сообщение об ошибке:
14: 38: 04855 INFO [HTTPSender] Невозможно sendViaPost к URL [...]
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.
Я понимаю, что HttpClient благодаря связанному с ним MultiThreadedHttpConnectionManager будет потокобезопасным. Вопрос в том, что происходит с заглушкой Axis2? Смогут ли заглушки быть потокобезопасными?
Я видел несколько сообщений, на которых указано, что осевые штыри не являются потокобезопасными по дизайну. Если это так, в чем преимущество использования многопоточного HttpClient? Как я могу убедиться, что заглушка клиента Axis применима в многопоточной среде?
Спасибо
Благодарим за ответ. Думаю, это дает мне некоторое облегчение, если это не проблема с клиентом. –
Предполагая, что заглушка не является потокобезопасной, у меня действительно есть три варианта: 1. Создавать/уничтожать заглушку каждый раз, когда я делаю запрос. 2. Использовать заглушку ThreadLocal или 3. Синхронизировать доступ к общему экземпляру (или пулу экземпляров) заглушки. Опция ThreadLocal имела бы наименее эффективный процессор, но могла значительно увеличить объем памяти на сервере с большими пулами потоков. Остальные два удержали бы объем памяти до минимума, но потребовали бы значительно (?) Большего количества CPU. Основываясь на своем опыте, вы бы рекомендовали один подход? спасибо –