Hello all,

I've just started using SCXML and it's great. However, I've hit a brick wall
and I can't seem to figure out something. I have the following XML file:

<scxml xmlns="http://www.w3.org/2005/07/scxml";
       version="1.0"
       initialstate="state1">

    <state id="state1">
        <onentry>
            <log expr="State 1"/>
        </onentry>
        <transition target="state2" />
    </state>

    <state id="state2">
        <onentry>
            <log expr="State 2"/>
        </onentry>
        <transition target="state3" cond="1 = 2" />
    </state>

    <state id="state3" final="true">
        <onentry>
            <log expr="State 3"/>
        </onentry>
    </state>

</scxml>

Now, I execute the state machine like this:

        SCXMLExecutor exec = null;
        exec = new SCXMLExecutor(new ELEvaluator(), new SimpleDispatcher(),
new SimpleErrorReporter());
        Context ctx = new ELContext();
        exec.setRootContext(ctx);
        exec.setStateMachine(scxml);
        exec.setSuperStep(true);
        // Start execution
        try {
            exec.go();
            exec.go();
        } catch (ModelException e) {
            e.printStackTrace();
        }

As you can see I call exec.go() two times. I would expect that in the first
time, the state machine will stop in the "state2" state and remain there,
because condition is not satisfied for going into "state3". However, when
exec.go() is called the second time, it goes from the start. Effectively, it
acts as exec.reset()? Following output is provided:

        03.05.2011. 14:01:32 org.apache.commons.scxml.model.Log execute
        INFO: null: State 1
        03.05.2011. 14:01:32 org.apache.commons.scxml.model.Log execute
        INFO: null: State 2
        03.05.2011. 14:01:32 org.apache.commons.scxml.model.Log execute
        INFO: null: State 1
        03.05.2011. 14:01:32 org.apache.commons.scxml.model.Log execute
        INFO: null: State 2

Could you explain this behavior?

Reply via email to