You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ode.apache.org by Song Thuy Nguyen <pr...@biaqua.de> on 2010/03/25 17:22:16 UTC

Resend after timeout

Hello, 

**short story**

I would like to have ODE resend Invoke-calls after a certain time elapsed without an answer. I have read the page about activity, failure and recovery http://ode.apache.org/activity-failure-and-recovery.html but this is not exactly what I want, the solution provided  here is a BPEL extension. For my case I don't want it to appear in the BPEL.

Since ODE is using axis2 to call web services, I though there maybe a configuration in the axis2.xml that would activate resend after a timeout.

 

**long story**

If you need more details about my scenario:

 

ODE executes a BPEL file calling web services, all calls are send to Apache Synapse by the properties.endpoint config-file by a proxy-like manner.  Apache Synapse will then forward this SOAP request to the specific (primary) endpoint fo the web service. If the server on which this service is hosted is offline Synapse will get a failure, this activates Synapses failover mechanism to send the SOAP message to another (secondary) endpoint with an equivalent web service (e.g. on another online server). When this call is successfull the Synapse will get the SOAP reply from the secondary endpoint back to ODE. In this case ODE will NOT notice that the call to the primary endpoint failed and the reply it is getting comes from the secondary endpoint.

 

But this scenario changes when the primary endpoint( web service) is just inactive (for example deactivated by the server) but its server is still running, inbound port is still open, the server will still accept the SOAP-request so Synapse will NOT get a failure because it could succesfully deliver the SOAP-request. But the server will send bak a http-404 message back to Synapse, because the requested web service is inactive or could not be found. This message is perfectly fine with Synapse and it forward it back to the ODE and ofcourse for ODE this message is an error that can't be processed without faulthandling.

 

Somehow the developer of Synapse have not consider the second scenario as something that should trigger failover. And the way synapse is designed does not allow this problem to be solve as it seems (trust me, I have done my researches and also the developer of Synapse confirmed that this can't be easily done). Once Synpase is able to deliver the request it will be deleted and when the reply with the 404 error comes back there is no way to link it with the previous request and resend the request to another endpoint. That's the problem.

 

So my workaround would be: once Synapse receive the 404 error from the server, it will just drop this message without forwarding back to ODE AND put the endpoint from which it got the 404-error to a black list. After some time passed without receiving a reply, ODE should try to resend the same request, which now will be forwarded to the secondary endpoint by Synapse. And as I don't want it to appear in the BPEL, I would like to have axis2 doing it.

 

Can it be done by configuration or do I have to modify ODE or axis2?

 

Any help will be appreciated.