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.

Reply via email to