axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Aleksander Slominski <as...@cs.indiana.edu>
Subject Re: Client operation call interrupt - IMPORTANT
Date Tue, 01 Feb 2005 16:56:57 GMT
Steve Loughran wrote:

> 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.
>
> Keepalives
> 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
>  }

actually i think it is a perfect case for WS-RM or WS-Reliability (only 
of the implementations of them were easier to use ...)
as you want to get reliable delivery of messages (asynchronous - so you 
do not need to block waiting for response) using possibly multiple 
intermediaries (not just http proxy) ...

alek

-- 
The best way to predict the future is to invent it - Alan Kay


Mime
View raw message