Hi developers,
I have created a WS with some WebMethods running on Jboss as an Eclipse Dynamic Web
Project. I am doing that with the annotations from javax.jws.*.
Now, it is possible that a method needs some time to reply to a clients call. The client
could stop waiting for the reply by setting a timeout value on the WS call like:
client:
// a very short time to test the error
| int timeout = 10; // in ms
|
| // set the timeout property
| Map<String, Object> ctxt = ((BindingProvider)service).getRequestContext();
|
ctxt.put(com.sun.xml.internal.ws.client.dispatch.impl.protocol.MessageDispatcherHelper.REQUEST_TIMEOUT,
timeout);
|
| // now call the WS method
| result = service.myMethod(number);
If now the client stops waiting for the reply and after some time my serverside method
wants to return its result to the client it fails with a java.net.SocketException
'Broken Pipe'. Unfortunately my servermethod finished successfully without getting
known of the failed communication. The exception can only be seen in the jboss log.
Is there a common way to get known of the clientside connection reset within my serverside
method? Does the WS-Framework provide any concept to manage such a race condition in an
elegant way?
Or have u any other ideas on how I could solve my problem? I need to know, that the client
has not recieved my result, cause in that case I need to rollback some actions that have
been done on server side.
jboss-log4j serverlog:
2008-07-12 20:25:19,546 INFO [myws.MyWebServiceImpl] Webservice called:
myMethod(5000001)
| 2008-07-12 20:25:19,766 DEBUG [myws.MyWebServiceImpl] returning result
| 2008-07-12 20:25:19,767 ERROR
[org.jboss.ws.core.server.AbstractServiceEndpointServlet] Error processing web service
request
| ClientAbortException: java.net.SocketException: Broken pipe
| at
org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
| at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
| at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:309)
| at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:288)
| at
org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:98)
| at
org.jboss.ws.core.server.ServiceEndpointManager.processRequest(ServiceEndpointManager.java:485)
| at
org.jboss.ws.core.server.AbstractServiceEndpointServlet.doPost(AbstractServiceEndpointServlet.java:114)
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
| at
org.jboss.ws.core.server.AbstractServiceEndpointServlet.service(AbstractServiceEndpointServlet.java:75)
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
| at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
| at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
| at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
| at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
| at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
| at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
| at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
| at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
| at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
| at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
| at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
| at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
| at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
| at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
| at java.lang.Thread.run(Thread.java:619)
| Caused by: java.net.SocketException: Broken pipe
| at java.net.SocketOutputStream.socketWrite0(Native Method)
| at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
| at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
| at
org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:764)
| at
org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:124)
| at
org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:570)
| at org.apache.coyote.Response.doWrite(Response.java:560)
| at
org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
| ... 27 more
|
Thanks a lot for help.
javaboss2008
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4164054#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...