[ https://issues.apache.org/activemq/browse/SM-439?page=all ]
james strachan resolved SM-439.
-------------------------------
Resolution: Fixed
OK I think I've fixed it for good this time :)
This test case managed to bring to light a few timing issues in the code.
Basically the Workflow class was a little too complex for its own good so I've
simplified that a bit. Also there was a chance that in JoinSupport things could
get started twice which is now fixed. Finally the one that really took me a
while to figure out was that sometimes activities stop before they have
completely finished starting; so the AbstractActivity start() method now only
sets the status to Start if it is Starting (to avoid overwriting the
Stopped/Failed status)
> servicemix-beanflow - Workflow.joinAll failure to register onStop callback if
> first Activity stops during start handler
> -----------------------------------------------------------------------------------------------------------------------
>
> Key: SM-439
> URL: https://issues.apache.org/activemq/browse/SM-439
> Project: ServiceMix
> Issue Type: Bug
> Components: beanflow
> Affects Versions: incubation
> Environment: osx, jdk 1.5
> Reporter: Jason Anderson
> Assigned To: james strachan
> Fix For: 3.0-M3
>
>
> if the following code is run the JoinFlow.stop state will never be thrown
> because the internal JoinAll state is set to stopped after forking the first
> activity in the JoinSupport(Activity ...) constructor before the onStop
> callback is registered in WorkFlow.join
> public class JoinTest extends TestCase {
> public static class JoinFlow extends Workflow<JoinFlow.Step> {
> public static enum Step {
> first, stop
> }
> public JoinFlow() {
> super(Step.first);
> }
> public void first() {
> final Activity a = new TimeoutActivity() {
> protected void onValidStateChange() {
> System.out.println("in a");
> stop();
> }
> };
> final Activity b = new TimeoutActivity() {
> protected void onValidStateChange() {
> System.out.println("in b");
> stop();
> }
> };
> System.out.println("in first");
> joinAll(Step.stop, 10000, a, b);
> System.out.println("after join");
> }
> }
> public void testJoin() throws Exception {
> JoinFlow flow = new JoinFlow();
> flow.start();
> flow.join();
> }
> }
> I believe if the JoinSupport were to add all the activities to the children
> list before forking them it would prevent the JoinAll.onChildStateChange from
> being called prematurely with childCount=1, stoppedCount=1 when there should
> be 2 children but I cannot currently get the maven build to run to test this
> thoery
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira