Thuy,
I'm not aware of any existing support for this. I'm not sure I fully
understand the requirements though. If the intent is to redirect a failed
invocation to another endpoint then modifying the endpoint for an active
process instance seems insufficient. Wouldn't you also need to detect the
failure and retry the failed activity? Would you also want all subsequent
process instances to use the new endpoint, or would you expect each new
instance to try the original ep and fail over as well?
If for some reason you cannot model the error handling in your BPEL
process (which would be my first choice), it sounds like you would be
better off capturing that logic elsewhere and using a fixed endpoint from
BPEL. You could hide your 'real', potentially changing endpoints behind
some other routing component (e.g. a camel route if you were running in
servicemix).
~Greg
On Tue, 15 Dec 2009 11:16:00 -0500, Song Thuy Nguyen
<[email protected]> wrote:
Hi everyone,
I'm quite new to Apache ODE and mailing lists, hoping for your help. I
have
posted a similiar question in the user mailing list, but maybe here is a
better place to ask, as it has something to do with extending ODE.
As the title says I'm looking for a way to change service endpoints for
BPEL
process instances at runtime. That means that only one instance should be
affected by these changes, not the entire process and the deployment
descriptor. By convention of the project I'm working on, it is not
allowed
to write a BPEL-process that looks up service endpoints at a registry
service, put it in an variable and use it as the dynamic endpoint. The
reason is we want to provide a fault resistant BPEL process execution by
replacing failing or unavailabe service endpoints by working ones with
transparency to the process. So there should be no sign of the "fault
handling" in the BPEL file. Failing services will be detected by a
monitor
component, but this is not my part.
I have tried to look into the Management API doc for processes and
instances
to find a method that can provide a solution, but I had no luck. There
are
only methods to get and set endpoints on a process-wide level, on a
instance
level however, those methods are not available.
It seems to me that the only way to get such a functionality is to extend
the Instance Management API and write those methods myself. If this is
right, can someone please tell me where to start? I think there should be
Java objects representing each BPEL instance, and there are variables
storing the endpoints, so if I change them, I would get the
functionality I
need , right?
Or maybe there is already a built-in mechanism to do that but I missed
it?
Any help or comment would be appreciated.