commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nestor Urquiza <>
Subject Re: [scxml] including chunks of scxml code.
Date Fri, 05 Jan 2007 14:17:54 GMT
I am sorry I could not reply before. Then,

Using templating thru //state/@src is useful for
including reusable FSM as mean of whole states.

XInclude/XML Entities are useful for including chunks
of SCXML logic.

I am not sure how the first works but seems like
commons-scxml would parse just once those states
defined within the reusable FSM. For the second one I
think it complies with DRY principles, however since
including nodes means more processing for either SAX
or DOM parser I would predict some performance
degradation (the same in comparison to just copying
and pasting the bits within the main SCXML file

The question of course is if SCXML provides a way/tag
for real code reuse either templating or functions
that can be used "for any arbitrary bits or pieces". I
can read from [1] 

"Note that the <invoke> element may be used to invoke
an external SCXML interpreter to execute a different
state machine. In this case, the external state
machine acts as a set of substates of the invoking
state. The behavior is thus similar to a complex state
defined with <state> child elements. The most
important difference is that in the <invoke> case, the
external state machine does not share context with the
invoking machine. In particular, the invoked machine
cannot access any variables declared in the invoking
machine and data can be shared only by being
explicitly passed via the <param> element.
Furthermore, IDs need not be distinct across the two
machines (though they must, of course, be distinct
within each machine.) The <invoke> tag thus provides a
means of well-encapsulated code reuse."

Can anyone offer some snippet of code to solve let us
say the following simple example of code reuse?

usecase: Build a template/function that returns the
name of the pet knowing that:
if animal type="dog" then name="Fido"
if animal type="cat" then name="Kitty"
if animal type="bird" then name="Tweety"
if animal type="horse" then name="Trigger"
if animal type="cat" then name="Tom"
if animal type="pig" then name="Porky"
if animal type="fish" then name="Charlie"
if animal type="pig" then name="Babe"
if animal type="cow" then name="Elsie"
if animal type="cat" then name="Puss"

Of course using <invoke> and <finalize> it seems to be
possible to accomplish this but I am wondering if
someone already used them or simply someone can write
down the snippet of code that actually works while
using of course commons-scxml.




--- Rahul Akolkar <> wrote:

> On 11/1/06, Craig McClanahan <>
> wrote:
> > On 11/1/06, Nestor Urquiza <>
> wrote:
> > >
> > > Hello guys,
> > >
> > > I need to apply DRY ;-) so I do not want to be
> > > duplicating SCXML code that is to be included in
> many
> > > different states.
> > >
> > > Just wondering about the options we have here:
> > >
> > > 1)XInclude
> > > 2)A special tag from scxml???
> > > 3) Any other idea?
> >
> >
> > XML entities?
> >
> <snip/>
> This will work well for any abitrary bits and
> pieces, the earlier
> solution is just for <state>s. But if you choose
> this, you'll have to
> worry about duplicating state IDs, if the bits and
> pieces contain
> those.
> -Rahul
> > Thanks,
> > >
> > > -Nestor
> >
> >
> > Craig
> >
> >
> To unsubscribe, e-mail:
> For additional commands, e-mail:

Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 

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

View raw message