Застрял поток в сервере WebLogic - PullRequest
1 голос
/ 16 декабря 2011

Когда мы выполняем вызов API веб-служб, иногда мы не получаем ответ.Наш поток просто ждет ответа и не возвращает ошибку.Время ожидания указывается в запросе веб-службы с помощью параметра com.sun.xml.ws.request.timeout.Но тайм-ауты не работают в этом сценарии.

Сведения об окружении:

Application server: Weblogic
Operating System: Linux
Web services API: Metro

Кто-нибудь имеет представление об этой проблеме?

Трассировка стека:

"DefaultQuartzScheduler_Worker-88" RUNNABLE native
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
weblogic.utils.io.ChunkedInputStream.read(ChunkedInputStream.java:159)
java.io.InputStream.read(InputStream.java:89)
com.certicom.tls.record.ReadHandler.readFragment(Unknown Source)
com.certicom.tls.record.ReadHandler.readRecord(Unknown Source)
com.certicom.tls.record.ReadHandler.read(Unknown Source)
com.certicom.io.InputSSLIOStreamWrapper.read(Unknown Source)
java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
java.io.BufferedInputStream.read(BufferedInputStream.java:235)
weblogic.net.http.MessageHeader.isHTTP(MessageHeader.java:220)
weblogic.net.http.MessageHeader.parseHeader(MessageHeader.java:143)
weblogic.net.http.HttpClient.parseHTTP(HttpClient.java:463)
weblogic.net.http.HttpURLConnection.getInputStream(HttpURLConnection.java:357)
weblogic.net.http.SOAPHttpsURLConnection.getInputStream(SOAPHttpsURLConnection.java:37)
weblogic.net.http.HttpURLConnection.getResponseCode(HttpURLConnection.java:945)
com.sun.xml.ws.transport.http.client.HttpClientTransport.readResponseCodeAndMessage(HttpClientTransport.java:209)
com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:160)
com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:93)
com.sun.xml.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:116)
com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:598)
com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:557)
com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:542)
com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:439)
com.sun.xml.ws.api.pipe.helper.AbstractTubeImpl.process(AbstractTubeImpl.java:112)
com.sun.xml.xwss.XWSSClientPipe.process(XWSSClientPipe.java:154)
com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:115)
com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:598)
com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:557)
com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:542)
com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:439)
com.sun.xml.ws.client.Stub.process(Stub.java:222)
com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:135)
com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:109)
com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118)
$Proxy87.getMapping(Unknown Source)

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

Трассировка стека показывает, что сокет открыт между клиентом и веб-сервисом.Происходит некоторое чтение, т.е. передача данных, но это может занять очень много времени.

Является ли клиент в Weblogic или веб-сервис, размещенный в Weblogic, или оба одновременно?

Можете ли вы проверить netstat -an |grep

Показывает ли сокеты в УСТАНОВЛЕННОМ состоянии?или в каком-либо другом состоянии, например, TIME_WAIT или CLOSE_WAIT?

Как долго вы настраивали тайм-аут при работе?Значение по умолчанию составляет 600 секунд, поэтому эта операция занимает больше 10 минут?

0 голосов
/ 31 июля 2012

Попробуйте добавить «com.sun.xml.ws.connect.timeout».

Оба свойства также доступны в постоянной форме: com.sun.xml.ws.client.BindingProviderProperties.REQUEST_TIMEOUT com.sun.xml.ws.client.BindingProviderProperties.CONNECT_TIMEOUT

Убедитесь, что вы не используете внутренний импорт, он не будет работать в WebLogic.

...