commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ouyang, Landon - ES/RDR -Gil" <Landon.Ouy...@itt.com>
Subject RE: [SCXML] W3C specs compatibility and state transition issues
Date Fri, 11 Apr 2008 23:15:34 GMT
Hmmm....

Given your snippet, I assumed this would work:

result aResult = new result();

if(bIsTest)
   aResult.value = 1;
else
   aResult.value = 0;

getEngine().getRootContext().set("result", aResult);

where the XML transition is conditional on "result.value eq 1". Why
doesn't it work?

--
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: Friday, April 11, 2008 2:18 PM
To: Jakarta Commons Users List
Subject: Re: [SCXML] W3C specs compatibility and state transition issues

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


This e-mail and any files transmitted with it may be proprietary and are intended solely for
the use of the individual or entity to whom they are addressed. If you have received this
e-mail in error please notify the sender. Please note that any views or opinions presented
in this e-mail are solely those of the author and do not necessarily represent those of ITT
Corporation. The recipient should check this e-mail and any attachments for the presence of
viruses. ITT accepts no liability for any damage caused by any virus transmitted by this e-mail.

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


Mime
View raw message