From inspecting the bpel process the reason not all scopes are
compensated when the throw is inside the while loops is because an
exception is now being thrown from inside a scope intended to be
compensated. According to section 12.4.3 in the BPEL 2.0 specification a
compensation handler is only available when a scope completes
successfully. This is why moving the throw out of the loops results in
expected compensation since all of scopes now complete successfully.
Bill McCusker
Chris Ma wrote:
I upload the BPEL http://www.nabble.com/file/p21928772/instance_group.txt
program . Thanks a lot..
Chris Ma
mriou wrote:
On Sun, Feb 8, 2009 at 8:05 PM, Chris Ma <[email protected]> wrote:
Hi all,
I am doing a survey on BPEL's compensation instances group and I found
some strange nature which is not specific in the BPEL specification 2.0,
I
am not sure if it is normal or not in all BPEL server, or anyone has the
practical example to support the strange nature?
As the following program, a while loop count x from 0 to 5, it contains a
scope, the scope increase X by 1, the compensation of the scope decrease
X
by 1.
the strange is, if a throw inside the while loop is called(e.g. throw_1),
the last compensation instance is executed. X will finally be 2. on the
other hand, if a throw outside the while loop is called(throw_2), all
compensation instances are invoked and X will finally be 0. It is strange
that the throw_1 can not call all the compenstion instances...Please
comment. Thanks!
Interesting. Do you have the BPEL process implementing this? I like
pseudo-code but to comment on such a specific behavior, I'd like to see
the
exact code.
Thanks,
Matthieu
X=0
While X < 5
{ A ? C , F } where A has activity X= X + 1, C is compensation X=X
-1, F is the fault handler.
if x >2 then (throw_1-> compensate)
loop
(throw_2 -> compensate)
Chris Ma.
--
View this message in context:
http://www.nabble.com/Problem-in-compensation-instances-group-tp21906836p21906836.html
Sent from the Apache Ode User mailing list archive at Nabble.com.