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 [SCXML] State transitions from within handler
Date Mon, 14 Apr 2008 17:24:10 GMT
Rahul,

Thanks for your help, I was able to implement the state transition
method you had described earlier.

The reason for this investigation is that we intend to use the Commons
SCXML engine to implement highly complex systems by separating all the
"pieces" into atomic modules (states). However, we would like the
decision making for the transitions to be done within the application
code (state handlers) and not the state machine implementation (XML). We
foresee problems if the XML document must specifically reference the
attributes needed to decide which transitions occur (ie 'result.value'
in our earlier example).

The only way I can think around this problem is to create a custom
transition/event stack in which the next event gets pushed during the
state handler and popped once we are officially in the current state
(since the previous state is still being processed while we are in the
handler).

Is there a better way around this issue? If not, where in
AbstractStateMachine will I know for a fact that the previous state's
processing has been completed?

Thanks once again,
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: Monday, April 14, 2008 9:31 AM
To: Jakarta Commons Users List
Subject: RE: [SCXML] W3C specs compatibility and state transition issues

Hi Rahul,

My (limited) understand of JavaBeans is that a JavaBean object must
implement java.io.Serializable, has a public no argument constructor,
and contains set/get methods for properties. So I setup my result class
as follows:

    class result implements Serializable
        {
        public result() {}
        private int value;
        public int getValue()
            { return value; }
        public void setValue(int nNum)
            { value = nNum; }
        }

However, the state transition still does not work!

FYI, I was able to prove that the object is sent to the engine correctly
using:

result newResult = (result)getEngine().getRootContext().get("result");

But for some reason, I cannot retrieve/use "result.value" in my XML
file!

Any ideas what I'm missing here? Thanks for the help.

--
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 6:56 PM
To: Jakarta Commons Users List
Subject: Re: [SCXML] W3C specs compatibility and state transition issues

On Fri, Apr 11, 2008 at 7:15 PM, Ouyang, Landon - ES/RDR -Gil
<Landon.Ouyang@itt.com> wrote:
> 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?
>
<snip/>

Try adding getter and setter methods, as I suggest below (for property
"value" in this example). Detailed discussion is in the JavaBeans
spec, which forms the basis of bean property access in most ELs we
use.

-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: 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
>

---------------------------------------------------------------------
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


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