commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rahul Akolkar" <rahul.akol...@gmail.com>
Subject Re: [SCXML] W3C specs compatibility and state transition issues
Date Fri, 11 Apr 2008 21:17:54 GMT
On Fri, Apr 11, 2008 at 5:01 PM, Ouyang, Landon - ES/RDR -Gil
<Landon.Ouyang@itt.com> wrote:
> I figured out the solution:
>
> I needed to remove the event properties from the conditional
> transitions. So if I change the state to:
>
> <state id="six">
>        <datamodel>
>                <data name="result">
>                        <value>0</value>
>                </data>
>        </datamodel>
>  <transition cond="result.value eq '1'" target="zero"/>
>  <transition cond="result.value eq '0'" target="five"/>
>  <transition target="three" event="display.prev"/>
> </state>
>
> the code will work! Am I missing any other crucial details?
>
<snip/>

Not really, but couple of comments:

 * At a quick glance, I suspect you don't need the <datamodel>
specified declaratively, so you can just remove the entire <datamodel>
element (we are setting "result.value" via Java handlers). A brief
discussion about datamodels is here:

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

 * When I gave the example (below), I intended "fooresult.success" and
"fooresult.numfailures" to be expressions of the flavor bean.property
i.e. fooresult was an instance of:

class FooResult {
  get/setSuccess()
  get/setNumfailures()
}

Generally better if you want to return a data structure, rather than
multiple "flat variables" (your example is fine, for one value its
much overhead).

-Rahul


> --
> Landon Ouyang
> Member Technical Staff
> ITT Electronics Systems, Radar Systems - Gilfillan
> 7821 Orion Ave,
> Van Nuys, CA 91406
> (818) 901-2982
>
>
> -----Original Message-----
> From: Ouyang, Landon - ES/RDR -Gil [mailto:Landon.Ouyang@itt.com]
> Sent: Friday, April 11, 2008 1:34 PM
> To: Jakarta Commons Users List
>
> Subject: RE: [SCXML] W3C specs compatibility and state transition issues
>
> Hi Rahul,
>
> Thanks for the quick and helpful response. I am still having trouble
> creating a conditional state transition. Using your example, I added a
> conditional transition in my XML file as follows:
>
> <state id="six">
> <datamodel>
>        <data name="result">
>                <value>0</value>
>        </data>
> </datamodel>
>  <transition cond="$(result.value eq '1')" target="zero"
> event="display.next"/>
>  <transition cond="$(result.value eq '0')" target="seven"
> event="display.next"/>
>  <transition target="five" event="display.prev"/>
> </state>
>
> My handler for state 6 is the following:
> public void six(){
>      getEngine().getRootContext().set("result.value", "1");
>        }
>
> I have a NEXT button in my GUI that fires off the 'display.next' event.
> In state 5, I hit this NEXT button and this code gets executed. I would
> assume that when I hit the NEXT button again I should be in state 0, but
> instead I stay in state 6 indefinitely!
>
> Can you tell me what I am doing wrong?
>
> --
> Landon Ouyang
> Member Technical Staff
> ITT Electronics Systems, Radar Systems - Gilfillan
> 7821 Orion Ave,
> Van Nuys, CA 91406
> (818) 901-2982
>
> -----Original Message-----
> From: Rahul Akolkar [mailto:rahul.akolkar@gmail.com]
> Sent: Thursday, April 10, 2008 6:22 PM
> To: Jakarta Commons Users List
> Subject: Re: [SCXML] W3C specs compatibility and state transition issues
>
> On Thu, Apr 10, 2008 at 8:30 PM, Ouyang, Landon - ES/RDR -Gil
> <Landon.Ouyang@itt.com> wrote:
> > Apologize for the duplicate e-mail, I had to be schooled on the proper
> format by Mr. Cooper. :)
> >
> >
> > I am a new user of Commons SCXML. I have two very basic questions:
> >
> > 1)      How much of the W3C specs for SCXML is supported with Common
> SCXML? Are all of the tags recognized?
> >
> <snip/>
>
> Not supported:
>  <anchor> (supporting this one is optional for engines)
>  <validate>
>
> Experimental (due to missing pieces in draft spec, see TBD markers for
> example):
>  <invoke>
>
>
> > 2)      Basing my code off of the simple stopwatch example, I created
> a simple Java app that navigated across 10 states. I noticed that if I
> put any code in the state handler methods that fires off events to
> transition to other states, the application still thinks I am in the
> *previous* state! For example, if I am in the state 5 subroutine and
> fire off an EVENT_NEXT event to go to state 6, the app actually keeps me
> in state 5 because it still thinks I am in state 4! Is it true that the
> state machine transitions *after* the handler for the new state is
> called? If so, how do I put custom code so that the state can make
> transition decisions based on certain conditions?
> >
> <snap/>
>
> You'd have to do that asynchronously (the executor is still processing
> the earlier event). However ...
>
> I'd store the result of "certain conditions" in the datamodel, and
> query the datamodel later, like so:
>
> public void foo() { // handler for state "foo"
>
>    // check certain conditions, create someresultbean
>
>    getEngine().getRootContext().put("fooresult", someresultbean);
> }
>
> And further, in a totally fictitious example:
>
> <state id="foo">
>    <transition cond="fooresult.success" target="bar"/>
>    <transition cond="fooresult.numfailures gt 2" target="exit"/>
>    <transition cond="not fooresult.success" target="foo"/> <!-- try
> again -->
>    <!-- foo's other content -->
> </state>
>
> -Rahul
>
>
> >
> >

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


Mime
View raw message