У меня есть веб-приложение Java / JSP, обслуживаемое Tomcat, которое обращается к веб-службе партнера для получения данных.Технологии, используемые в партнерской службе, неизвестны.Веб-служба партнера часто имеет расширенные сбои, когда она возвращает исключение SocketTimeout:
java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
Если веб-служба партнера имеет кратковременное отключение, а затем быстро восстанавливается, мое приложение прекрасно обрабатывает все.у веб-службы партнера длительное отключение составляет более часа, и у моего приложения были сотни обращений к службе, для которых истекло время ожидания, в какой-то момент мое приложение достигает состояния, когда оно не восстанавливается.Партнерская служба возвращается, но мои обращения к этой службе по-прежнему приводят к той же самой ошибке SocketTimeoutException.
Если я в этот момент запускаю и останавливаю Tomcat, после этого все работает нормально.
Я не использую http keep-alives.Мой код анально об очистке всех экземпляров объекта, независимо от того, происходят ли исключения или нет.Кажется, что Java-процесс Tomcat «использует» какой-то ресурс (сокеты?), Выбрасывая его с каждой ошибкой, пока не останется больше ничего, что можно было бы использовать.Кто-нибудь видел это раньше, и есть ли очевидное решение?Я много искал по этому вопросу и не нашел никого с такой же проблемой.
Заранее спасибо!John