commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Nestor Urquiza <nest...@yahoo.com>
Subject Re: [scxml] including chunks of scxml code.
Date Fri, 05 Jan 2007 19:14:49 GMT
Hi Rahul,

While java can be used of course and I use it for a
lot of helper methods like the one you propose for the
given example, it breaks the needed separation of
concerns for my case. 

The rule about the name of the pet can change tomorrow
when a new parameter is added to the equation, let us
say the owner: 

if animal type="dog" and owner="Mike" then name="Fido"
if animal type="dog" and owner="Tom" then
name="Rudolph"

And I do not want to overload a java method for that
matter specially if the rule will change again next
week.

While of course the example is simple to illustrate
the need the bottom line is that I want to use (and I
am using) commons-scxml as a Controller and so
business rules (very complex ones) can be added
without recompilation or java releases, accesible to
operations guys that are very close to business people
and far away from software developers. 

For those cases in which business rules change very
easy and even in a daily basis it is better to give
business people the power to change the functional
behavior of the package. I use java for the model and
JEXL with basic helper methods (built in java) and
accessible from SCXML for the controller part.

Since I have a system that is *dynamically*
configured,
I need some "power features" at the level of SCXML
like code reuse thru functions.

So, from your reply I understand commons-scxml does
not implement <invoke> still. We have to wait for an
agreement from W3C for invoke final implementation
right?

Just thinking aloud, I would expect SCXML to have
features like XSLT templating which is nothing but the
ability to reuse code thru functions. What you think?

Thanks a bunch,

-Nestor



--- Rahul Akolkar <rahul.akolkar@gmail.com> wrote:

> On 1/5/07, Nestor Urquiza <nestoru@yahoo.com> wrote:
> > Hi,
> > I am sorry I could not reply before. Then,
> >
> <snip/>
> 
> No rush at all :-)
> 
> 
> > 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
> > though).
> >
> <snap/>
> 
> Possibly, though its a one time cost (not per
> instance of state machine).
> 
> 
> > 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]
> >
> <snip-invoke-quote/>
> 
> The invoke tag is too heavyweight for the example
> below, and it is not
> completely fleshed out in the spec yet (as mentioned
> on Commons SCXML
> homepage).
> 
> 
> > 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.
> >
> <snap/>
> 
> For such bits, define functions in your own
> namespace (see bottom of
> this page [A] ). The above pseudo could be the body
> of:
> 
> public String petName(String species) { ... }
> 
> whereby the name is obtained within executable
> content in the SCXML document as:
> 
> <var name="pet" expr="${myfn:petName(type)}"/>  (EL)
> 
> <var name="pet" expr="myfn.petName(type)"/>  (JEXL)
> 
> This puts the procedural bits in a Java class, makes
> them reusable etc.
> 
> -Rahul
> 
> [A]
>
http://jakarta.apache.org/commons/scxml/guide/contexts-evaluators.html
> 
> 
> 
> > Thanks,
> >
> > -Nestor
> >
> > [1] http://www.w3.org/TR/scxml/
> >
> >
> > --- Rahul Akolkar <rahul.akolkar@gmail.com> wrote:
> >
> > > On 11/1/06, Craig McClanahan
> <craigmcc@apache.org>
> > > wrote:
> > > > On 11/1/06, Nestor Urquiza <nestoru@yahoo.com>
> > > 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:
> commons-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail:
> commons-user-help@jakarta.apache.org
> 
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

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


Mime
View raw message