I added your test case and it works fine on latest 1.X snapshot (hibernate and openjpa configs). You can check out branch http://github.com/rafalrusin/apache-ode/tree/APACHE_ODE_1.X-compensation-handlers enter jbi dir and type buildr _1.2.10_ clean test:CompensationHandlersJbiTest
If you feel it should fail, just try to mess up with jbi/src/test/resources/CompensationHandlersJbiTest/ directory. 2009/10/21 Jonathan Coogan <[email protected]>: > I have a scope/CompensationHandler inside a (non parallel) foreach. > When I try to compensate after several successful iterations the results > are very inconsistent. Sometimes the compensation handlers run. > Sometimes they don't. > > Here's my test process. The input is ignored. The process iterates 5 > times and then generates a fault to trigger the compensation. The > compensation handler just concats the foreach counter value to the > output. I would expect the output to be "5 4 3 2 1" but it's not. It > seems to return something different each time: "5 4 2 1", "5 4 2", "5 3 > 2 1". It gets even worse when I run the process "in memory": "4", "4 > 2", "5", "3", etc. > > This must be a bug in Ode, right? I'm using Ode 1.3.2. > > > <?xml version="1.0" encoding="UTF-8"?> > <bpel:process exitOnStandardFault="yes" > expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0" > name="CompensationTest1" > queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0" > suppressJoinFailure="no" > targetNamespace="test:test:CompensationTest1" > > xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable" > > xmlns:bpws="http://docs.oasis-open.org/wsbpel/2.0/process/executable" > xmlns:ode="http://www.apache.org/ode/type/extension" > xmlns:tns="test:test:CompensationTest1" > xmlns:xs="http://www.w3.org/2001/XMLSchema"> > <bpel:import importType="http://schemas.xmlsoap.org/wsdl/" > location="CompensationTest1.wsdl" > namespace="test:test:CompensationTest1"/> > <bpel:partnerLinks> > <bpel:partnerLink myRole="ServiceProvider" name="client" > partnerLinkType="tns:ServicePartnerLinkType"/> > </bpel:partnerLinks> > <bpel:variables> > <bpel:variable messageType="tns:InputMessage" name="input"/> > <bpel:variable messageType="tns:OutputMessage" name="output"/> > </bpel:variables> > <bpel:sequence name="process"> > <bpel:receive createInstance="yes" name="ReceiveInput" > operation="process" partnerLink="client" > portType="tns:ServicePortType" variable="input"/> > <bpel:assign name="InitializeOutput" validate="no"> > <bpel:copy> > <bpel:from > expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![C > DATA[""]]></bpel:from> > <bpel:to part="payload" variable="output"/> > </bpel:copy> > </bpel:assign> > <bpel:scope name="Scope"> > <bpel:faultHandlers> > <bpel:catch faultName="tns:DummyFault"> > <bpel:sequence> > <bpel:compensate name="Compensate"/> > </bpel:sequence> > </bpel:catch> > </bpel:faultHandlers> > <bpel:sequence name="Sequence"> > <bpel:forEach counterName="Counter" name="ForEach" > parallel="no"> > <bpel:startCounterValue > expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![C > DATA[1]]></bpel:startCounterValue> > <bpel:finalCounterValue > expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![C > DATA[5]]></bpel:finalCounterValue> > <bpel:scope name="IterateScope"> > <bpel:compensationHandler> > <bpel:sequence> > <bpel:assign name="Assign" > validate="no"> > <bpel:copy> > <bpel:from > expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"><![C > DATA[concat($output.payload, " ", $Counter)]]></bpel:from> > <bpel:to part="payload" > variable="output"/> > </bpel:copy> > </bpel:assign> > </bpel:sequence> > </bpel:compensationHandler> > <bpel:empty name="DoSomething5Times"/> > </bpel:scope> > </bpel:forEach> > <bpel:throw faultName="tns:DummyFault" name="Throw"/> > </bpel:sequence> > </bpel:scope> > <bpel:reply name="ReplyWithOutput" operation="process" > partnerLink="client" portType="tns:ServicePortType" > variable="output"/> > </bpel:sequence> > </bpel:process> > > Regards, -- Rafał Rusin http://www.touk.pl http://top.touk.pl http://people.apache.org/~rr/
