commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rahul Akolkar <>
Subject Re: [scxml] How to retrieve the transition target in a custom action
Date Tue, 21 Sep 2010 22:07:40 GMT
2010/9/21 Thiébault Benoît <>:
> Le 21 sept. 2010 à 00:12, Rahul Akolkar a écrit :
>> <snip/>
>> I believe you mean a transition thats not a stay nor self transition,
>> since the only way a custom action will ever execute is if some
>> transiton is being followed (in order for SCXML executable content to
>> execute).
> Thank you Rahul for your answer.
> Indeed I want to know wether I'm in a stay or self transition. I confirm that my custom
action is within a transition (or onentry/onexit).
>> There isn't a direct way to access information about the transition
>> target. I imagine your custom action is within a transition element.
>> If so, you could walk up the SCXML object model and check whether the
>> parent transition has a target attribute and whether it is the parent
>> state id itself.
> How can you do this from within a custom action?

See class Javadocs [1] for details, but briefly:

  Action#getParent() gives you the parent Executable container (such
as transition object)

  Action#getParentTransitionTarget() gives you the parent state (or
parallel etc.)

With a handle to those two, it should be possible to figure out
whether its a stay or self transition.



>> It may also be possible to infer whether a (non-stay)
>> transition is being followed and what the target is, by using a
>> suitable SCXMLListener impl.
>> For long computations, you should consider using the external
>> communications module (either <send> or <invoke>) to send an event to
>> (or invoke) some external process which manages the computation and
>> fires a completion event on the state machine when done.
> I quickly looked at the invoke examples provided in SCXML tests and they seem less appropriate
than using custom actions, which make the XML file more readable IMHO.
>> -Rahul
>>> I need this info to know if it is possible to launch a long computation in a
different thread:
>>> - if there is a transition target, the state machine will go to the new state
and my computation will be started in one state and continue in another one, which I want
to avoid.
>>> - if there is no transition target, it means that my computation is performed
within the original state (internal transition) and I can use my computation without fearing
an undetermined state machine.
>>> Kind regards,
>>> Ben

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message