You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Dario D <da...@gmail.com> on 2011/05/03 14:17:56 UTC

[scxml] Calling go() twice

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?

Re: [scxml] Calling go() twice

Posted by jocke eriksson <jo...@albatross.com>.
You will have to trigger an event I think.

2011/5/3 Dario D <da...@gmail.com>:
> Thanks Jocke. How would you suggest to resume the the last state before the
> condition was not met? Let's say that the condition was made valid somehow.
> How to resume from the last state?
>
> To continue the previous example:
>
>        try {
>            exec.go();
>            // Execution stops at state2, condition is not met
>            // Condition is made valid through some means
>            // How to resume?
>        } catch (ModelException e) {
>            e.printStackTrace();
>        }
>
>
> 2011/5/3 jocke eriksson <jo...@albatross.com>
>
>>  exec.go(); should only be called once. It will start the state
>> machine and it will go through all steps that meets the criteria
>> (event cond).
>>
>> Regards Jocke.
>>
>> 2011/5/3 Dario D <da...@gmail.com>:
>> > 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?
>> >
>>
>>
>>
>> --
>>
>> Joakim Eriksson
>>
>> Albatross
>> Holländargatan 20, 111 60 Stockholm Sweden
>> +46 8 51160773 | Mobile +46 708 507 480
>> joakim.eriksson@albatross.com | www.albatross.com
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>> For additional commands, e-mail: user-help@commons.apache.org
>>
>>
>



-- 

Joakim Eriksson

Albatross
Holländargatan 20, 111 60 Stockholm Sweden
+46 8 51160773 | Mobile +46 708 507 480
joakim.eriksson@albatross.com | www.albatross.com

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [scxml] Calling go() twice

Posted by Dario D <da...@gmail.com>.
Thank you Rahul for your fast response. So, the syntax is:

    <state id="action1">
        <onentry>
            <log expr="'entering action1'"/>
            <send event="'testEvent'"/>
        </onentry>
        <transition event="testEvent" target="action2"/>
        <onexit>
            <log expr="'exiting action1'"/>
        </onexit>
    </state>

and this works.

2011/5/10 Rahul Akolkar <ra...@gmail.com>

> On Tue, May 10, 2011 at 8:51 AM, Dario D <da...@gmail.com> wrote:
> > Rahul, in regards to triggering events, I am trying to trigger them from
> > within the workflow like this:
> >
> >    <datamodel>
> >        <data name="testEvent" expr="'some test event'"/>
> >    </datamodel>
> >
> >    <state id="action1">
> >        <onentry>
> >            <log expr="'entering action1'"/>
> >            <send event="testEvent"/>
> >        </onentry>
> >        <transition event="testEvent" target="action2"/>
> >        <onexit>
> >            <log expr="'exiting action1'"/>
> >        </onexit>
> >    </state>
> >    <state id="action2">
> >        <onentry>
> >            <log expr="'action2'"/>
> >        </onentry>
> >    </state>
> >
> > As you can see, I am trying to trigger an event from within "action1"
> state
> > and then move to "action2". However, this does not happen and the log
> output
> > shows only "entering action1". If the event is being triggered, why the
> > transition does not take place?
> >
> <snip/>
>
> I'll assume you're using JEXL given your previous post. If so, you'll
> need single quotes around the event name like so (its treated as an
> expression - spaces added below for readability):
>
>  event=" 'testEvent' "
>
> If you pass in an application log, you'll see a warn level message to
> the effect of expression not resolving to a (non-empty) event name
> string.
>
> -Rahul
>
>
> > Thank you.
> >
> > 2011/5/3 Rahul Akolkar <ra...@gmail.com>
> >
> >> On Tue, May 3, 2011 at 10:13 AM, Dario D <da...@gmail.com> wrote:
> >> > Thanks Jocke. How would you suggest to resume the the last state
> before
> >> the
> >> > condition was not met? Let's say that the condition was made valid
> >> somehow.
> >> > How to resume from the last state?
> >> >
> >> > To continue the previous example:
> >> >
> >> >        try {
> >> >            exec.go();
> >> >            // Execution stops at state2, condition is not met
> >> >            // Condition is made valid through some means
> >> >            // How to resume?
> >> >        } catch (ModelException e) {
> >> >            e.printStackTrace();
> >> >        }
> >> >
> >> <snip/>
> >>
> >> Triggering events is here:
> >>
> >>  http://commons.apache.org/scxml/guide/core-events.html
> >>
> >> The main page for the user guide, which has more, is here:
> >>
> >>  http://commons.apache.org/scxml/guide.html
> >>
> >> If you're using EL, you've have to use the EL syntax for expressions,
> >> so rather than the following from your example ...
> >>
> >>  <transition target="state3" cond="1 = 2" />
> >>
> >> ... the syntax will be like below:
> >>
> >>  <transition target="state3" cond="${1 eq 2}" />
> >>
> >> -Rahul
> >>
> >>
> >> >
> >> > 2011/5/3 jocke eriksson <jo...@albatross.com>
> >> >
> >> >>  exec.go(); should only be called once. It will start the state
> >> >> machine and it will go through all steps that meets the criteria
> >> >> (event cond).
> >> >>
> >> >> Regards Jocke.
> >> >>
> >> >> 2011/5/3 Dario D <da...@gmail.com>:
> >> >> > 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?
> >> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> >> For additional commands, e-mail: user-help@commons.apache.org
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>

Re: [scxml] Calling go() twice

Posted by Rahul Akolkar <ra...@gmail.com>.
On Tue, May 10, 2011 at 8:51 AM, Dario D <da...@gmail.com> wrote:
> Rahul, in regards to triggering events, I am trying to trigger them from
> within the workflow like this:
>
>    <datamodel>
>        <data name="testEvent" expr="'some test event'"/>
>    </datamodel>
>
>    <state id="action1">
>        <onentry>
>            <log expr="'entering action1'"/>
>            <send event="testEvent"/>
>        </onentry>
>        <transition event="testEvent" target="action2"/>
>        <onexit>
>            <log expr="'exiting action1'"/>
>        </onexit>
>    </state>
>    <state id="action2">
>        <onentry>
>            <log expr="'action2'"/>
>        </onentry>
>    </state>
>
> As you can see, I am trying to trigger an event from within "action1" state
> and then move to "action2". However, this does not happen and the log output
> shows only "entering action1". If the event is being triggered, why the
> transition does not take place?
>
<snip/>

I'll assume you're using JEXL given your previous post. If so, you'll
need single quotes around the event name like so (its treated as an
expression - spaces added below for readability):

  event=" 'testEvent' "

If you pass in an application log, you'll see a warn level message to
the effect of expression not resolving to a (non-empty) event name
string.

-Rahul


> Thank you.
>
> 2011/5/3 Rahul Akolkar <ra...@gmail.com>
>
>> On Tue, May 3, 2011 at 10:13 AM, Dario D <da...@gmail.com> wrote:
>> > Thanks Jocke. How would you suggest to resume the the last state before
>> the
>> > condition was not met? Let's say that the condition was made valid
>> somehow.
>> > How to resume from the last state?
>> >
>> > To continue the previous example:
>> >
>> >        try {
>> >            exec.go();
>> >            // Execution stops at state2, condition is not met
>> >            // Condition is made valid through some means
>> >            // How to resume?
>> >        } catch (ModelException e) {
>> >            e.printStackTrace();
>> >        }
>> >
>> <snip/>
>>
>> Triggering events is here:
>>
>>  http://commons.apache.org/scxml/guide/core-events.html
>>
>> The main page for the user guide, which has more, is here:
>>
>>  http://commons.apache.org/scxml/guide.html
>>
>> If you're using EL, you've have to use the EL syntax for expressions,
>> so rather than the following from your example ...
>>
>>  <transition target="state3" cond="1 = 2" />
>>
>> ... the syntax will be like below:
>>
>>  <transition target="state3" cond="${1 eq 2}" />
>>
>> -Rahul
>>
>>
>> >
>> > 2011/5/3 jocke eriksson <jo...@albatross.com>
>> >
>> >>  exec.go(); should only be called once. It will start the state
>> >> machine and it will go through all steps that meets the criteria
>> >> (event cond).
>> >>
>> >> Regards Jocke.
>> >>
>> >> 2011/5/3 Dario D <da...@gmail.com>:
>> >> > 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?
>> >> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>> For additional commands, e-mail: user-help@commons.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [scxml] Calling go() twice

Posted by Dario D <da...@gmail.com>.
Rahul, in regards to triggering events, I am trying to trigger them from
within the workflow like this:

    <datamodel>
        <data name="testEvent" expr="'some test event'"/>
    </datamodel>

    <state id="action1">
        <onentry>
            <log expr="'entering action1'"/>
            <send event="testEvent"/>
        </onentry>
        <transition event="testEvent" target="action2"/>
        <onexit>
            <log expr="'exiting action1'"/>
        </onexit>
    </state>
    <state id="action2">
        <onentry>
            <log expr="'action2'"/>
        </onentry>
    </state>

As you can see, I am trying to trigger an event from within "action1" state
and then move to "action2". However, this does not happen and the log output
shows only "entering action1". If the event is being triggered, why the
transition does not take place?

Thank you.

2011/5/3 Rahul Akolkar <ra...@gmail.com>

> On Tue, May 3, 2011 at 10:13 AM, Dario D <da...@gmail.com> wrote:
> > Thanks Jocke. How would you suggest to resume the the last state before
> the
> > condition was not met? Let's say that the condition was made valid
> somehow.
> > How to resume from the last state?
> >
> > To continue the previous example:
> >
> >        try {
> >            exec.go();
> >            // Execution stops at state2, condition is not met
> >            // Condition is made valid through some means
> >            // How to resume?
> >        } catch (ModelException e) {
> >            e.printStackTrace();
> >        }
> >
> <snip/>
>
> Triggering events is here:
>
>  http://commons.apache.org/scxml/guide/core-events.html
>
> The main page for the user guide, which has more, is here:
>
>  http://commons.apache.org/scxml/guide.html
>
> If you're using EL, you've have to use the EL syntax for expressions,
> so rather than the following from your example ...
>
>  <transition target="state3" cond="1 = 2" />
>
> ... the syntax will be like below:
>
>  <transition target="state3" cond="${1 eq 2}" />
>
> -Rahul
>
>
> >
> > 2011/5/3 jocke eriksson <jo...@albatross.com>
> >
> >>  exec.go(); should only be called once. It will start the state
> >> machine and it will go through all steps that meets the criteria
> >> (event cond).
> >>
> >> Regards Jocke.
> >>
> >> 2011/5/3 Dario D <da...@gmail.com>:
> >> > 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?
> >> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>

Re: [scxml] Calling go() twice

Posted by Rahul Akolkar <ra...@gmail.com>.
On Tue, May 3, 2011 at 10:13 AM, Dario D <da...@gmail.com> wrote:
> Thanks Jocke. How would you suggest to resume the the last state before the
> condition was not met? Let's say that the condition was made valid somehow.
> How to resume from the last state?
>
> To continue the previous example:
>
>        try {
>            exec.go();
>            // Execution stops at state2, condition is not met
>            // Condition is made valid through some means
>            // How to resume?
>        } catch (ModelException e) {
>            e.printStackTrace();
>        }
>
<snip/>

Triggering events is here:

  http://commons.apache.org/scxml/guide/core-events.html

The main page for the user guide, which has more, is here:

  http://commons.apache.org/scxml/guide.html

If you're using EL, you've have to use the EL syntax for expressions,
so rather than the following from your example ...

  <transition target="state3" cond="1 = 2" />

... the syntax will be like below:

  <transition target="state3" cond="${1 eq 2}" />

-Rahul


>
> 2011/5/3 jocke eriksson <jo...@albatross.com>
>
>>  exec.go(); should only be called once. It will start the state
>> machine and it will go through all steps that meets the criteria
>> (event cond).
>>
>> Regards Jocke.
>>
>> 2011/5/3 Dario D <da...@gmail.com>:
>> > 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?
>> >

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Re: [scxml] Calling go() twice

Posted by Dario D <da...@gmail.com>.
Thanks Jocke. How would you suggest to resume the the last state before the
condition was not met? Let's say that the condition was made valid somehow.
How to resume from the last state?

To continue the previous example:

        try {
            exec.go();
            // Execution stops at state2, condition is not met
            // Condition is made valid through some means
            // How to resume?
        } catch (ModelException e) {
            e.printStackTrace();
        }


2011/5/3 jocke eriksson <jo...@albatross.com>

>  exec.go(); should only be called once. It will start the state
> machine and it will go through all steps that meets the criteria
> (event cond).
>
> Regards Jocke.
>
> 2011/5/3 Dario D <da...@gmail.com>:
> > 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?
> >
>
>
>
> --
>
> Joakim Eriksson
>
> Albatross
> Holländargatan 20, 111 60 Stockholm Sweden
> +46 8 51160773 | Mobile +46 708 507 480
> joakim.eriksson@albatross.com | www.albatross.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>

Re: [scxml] Calling go() twice

Posted by jocke eriksson <jo...@albatross.com>.
 exec.go(); should only be called once. It will start the state
machine and it will go through all steps that meets the criteria
(event cond).

Regards Jocke.

2011/5/3 Dario D <da...@gmail.com>:
> 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?
>



-- 

Joakim Eriksson

Albatross
Holländargatan 20, 111 60 Stockholm Sweden
+46 8 51160773 | Mobile +46 708 507 480
joakim.eriksson@albatross.com | www.albatross.com

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org