commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Prem Chand Majeti <prem.maj...@aricent.com>
Subject RE: [scxml] Regarding usage of fireEvent method
Date Tue, 03 Aug 2010 15:06:04 GMT

Thanks for your help rahul.
I will go through the interaction patterns provided in the link and check if it solves my
problem.

- Prem

-----Original Message-----
From: Rahul Akolkar [mailto:rahul.akolkar@gmail.com]
Sent: Monday, August 02, 2010 11:36 PM
To: Commons Users List
Subject: Re: [scxml] Regarding usage of fireEvent method

On Mon, Aug 2, 2010 at 1:40 AM, Prem Chand Majeti
<prem.majeti@aricent.com> wrote:
> Hi,
>
> I'm trying to implement simple FSM in java.
>
> Here is my scxml :-
>
> <scxml xmlns="http://www.w3.org/2005/07/scxml"
>       version="1.0" initialstate="first">
>
>    <state id="first">
>            <transition event="event1" target="second" />
>            <transition event="event2" target="last" />
>    </state>
>
>    <state id="second">
>            <transition event="event3" target="last" />
>    </state>
>
>    <state id="last" final="true" />
>
> </scxml>
>
> Java Implemetation:-
>
> public class FsmTest extends AbstractStateMachine {
>
>            public FsmTest(URL scxmlDocument) {
>                        super(scxmlDocument);
>            }
>
>            public void first() {
>                        //Some process...
>                        if(..)
>                                    fireEvent("event1");
>                        else
>                                    fireEvent("event2");
>            }
>
<snip/>

The above is a bit of an anti-pattern for the simple
AbstractStateMachine class. The mapped methods (such as "first" above)
are executed synchronously as part of the onentry processing for the
corresponding states. Firing a new event synchronously while still
processing a previous one isn't recommended.

Many possible solutions. To name a few:

 * Override the fireEvent() method to be asynchronous (in a new
thread, perhaps with some wait time)
 * Add a first-class event queue to an AbstractStateMachine subclass
and add events to the queue from where they get processed in sequence
 * Use one of the more sophisticated patterns (see [1]) than the
simple AbstractStateMachine class

-Rahul

[1] http://commons.apache.org/scxml/guide/using-commons-scxml.html


>            public void second() {
>                        // Some Process....
>                        fireEvent("event3");
>            }
>
>            public void last() {
>            }
>
> }
>
> When I try to run this, it was entering into the state "first". But from there no event
was fired and it was not moving to other states.
> Please let me know if I was doing something wrong.
>
> Thanks & Regards
> Prem
>
>

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


"DISCLAIMER: This message is proprietary to Aricent and is intended solely for the use of
the individual to whom it is addressed. It may contain privileged or confidential information
and should not be circulated or used for any purpose other than for what it is intended. If
you have received this message in error, please notify the originator immediately. If you
are not the intended recipient, you are notified that you are strictly prohibited from using,
copying, altering, or disclosing the contents of this message. Aricent accepts no responsibility
for loss or damage arising from the use of the information transmitted by this email including
damage from virus."

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


Mime
View raw message