Mantis - Hessian
Viewing Issue Advanced Details
2896 major always 09-03-08 00:12 09-23-08 14:01
pgrigoro  
 
normal  
new 3.2.0  
open  
none    
none  
0002896: Using Hessian Binary Web Service Protocol with the AJP protocol (Apache Tomcat Connector)
Hello everyone,

I have a problem regarding Hessian protocol. I am using the Hessian Binary Web Service Protocol (in a Demo Application) with the following configuration:

The Client (SWT Application) sends a (web Service) request to the Server (Tomcat) through an intermediate Server (Apache), which uses the AJP protocol to redirect the requests to the Tomcat Server. The application works fine, but after some time of usage, while the application tries to receive data from the Web Service, throws the following Exception:
com.caucho.hessian.client.HessianConnectionException: 500: java.net.SocketException: Connection reset
            at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:197)
            at $Proxy0.receive(Unknown Source)
            at com.caucho.ria.examples.client.Client.receiveDataFromWebService(Client.java:87)
            at com.caucho.ria.examples.client.ClientMainScreen$1.selectDataFromWS(ClientMainScreen.java:125)
            at com.caucho.ria.examples.client.ClientMainScreen$1.widgetSelected(ClientMainScreen.java:101)
            at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
            at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
            at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
            at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
            at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
            at com.caucho.ria.examples.client.ClientMainScreen.open(ClientMainScreen.java:72)
            at com.caucho.ria.examples.client.ClientMainScreen.main(ClientMainScreen.java:57)
Caused by: java.net.SocketException: Connection reset
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
            at java.lang.reflect.Constructor.newInstance(Unknown Source)
            at sun.net.www.protocol.http.HttpURLConnection$6.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at sun.net.www.protocol.http.HttpURLConnection.getChainedException(Unknown Source)
            at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
            at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:179)
            ... 11 more
Caused by: java.net.SocketException: Connection reset
            at java.net.SocketInputStream.read(Unknown Source)
            at java.io.BufferedInputStream.fill(Unknown Source)
            at java.io.BufferedInputStream.read1(Unknown Source)
            at java.io.BufferedInputStream.read(Unknown Source)
            at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
            at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
            at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
            at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
            at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
            at java.net.HttpURLConnection.getResponseCode(Unknown Source)
            at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:168)
            ... 11 more

There is no problem with the network connection, because we tried again to execute the request from the client (after the exception) and we received the data from the web service. But, the same problem occurred after a while.

Changing the configuration and sending the requests directly (from the client) to the Tomcat Server then the above problem disappears.

Have you any idea why this happens with the AJP protocol?

Notes
(0003475)
ferg   
09-23-08 14:01   
This just looks like a socket timeout. You might look at modifying the timeouts on both the server and client side.