axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Steve Loughran <>
Subject Re: Client operation call interrupt - IMPORTANT
Date Tue, 01 Feb 2005 12:42:02 GMT
Montabert, Olivier wrote:

>>true. but if you use keepalives on the TCP link you generate useless 
>>traffic; if you dont your client wont ever know that the 
>>server at the 
>>far end has ceased to exist.
> Indeed, I don't really know the underlying implementation
> that has been made for Axis...

well, step in the next time your debugger is about to make a call

> My guess of the client call underlying implementation is:
> - AXIS generates a SOAP envelope and body.
> - AXIS opens a socket to the web server (using the 
>   end-point URL).
> - Sends an HTTP request and waits for the reply on the
>   same socket.
> [ ... No further traffic occurs ... ]
> - The reply and the socket close occurs as soon as the
> skeleton sends the reply back through the same socket.
> Therefore I also use the getValue operation as keepalive 
> operation, as it will receive a network exception when the
> server crashes. Indeed when the server or the servlet crashes
> the socket is closed.
> Am I right ?

Only if you have TCP keepalives turned on.

If you dont, then the socket will wait forever until you try and send 
some data down it. You will get no information that the server has 
crashed, because there is nothing out there to send you a message. 
Welcome to the harsh realities of network failure.

consume bandwith, and power on mobile systems, and are off by default. 
This means your architecture does not detect server failure, not unless 
it has a timeout. Keepalives are implicit health check timeouts.

1. if you go through proxies, keeping the port open will consume 
resources on the server
2. keeping the port open means that you cant handle a transient failure 
of the server, as the restart will lose the port

> Does Axis use some thread wait/notify mechanisms ?
> Does Axis use the user thread to perform the operation 
> call ?

Olivier, the source is there for you to see, it makes blocking calls on 
the socket with the thread doing the read.

liike I said originally, consider probes. At the very least something like

  while(no answer) {
    -make call that blocks for 60 seconds
    -check for cancel event

View raw message