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#4164054 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4164054 _______________________________________________ jboss-user mailing list [email protected] https://lists.jboss.org/mailman/listinfo/jboss-user
