[rules-users] calls to 'Helper' classes in LHS - are they allowed?

Mark Proctor mproctor at codehaus.org
Mon Feb 12 19:16:22 EST 2007


We were hoping the community would work with us and improve the 
documentation over the last year - to date we have had zip :( We will 
have another documentation drive once we get to the candidate release 
stage for the current development cycle. We simply don't have the cycles 
to work on a book, with any luck after we spend 3 to 4 weeks on 
documentation during hte candidate release stage it should get better, 
and maybe one day  the manual can form the basis of a book. Some ideas 
for the  community to work include the examples in drools-examples, they 
can even use what I did for drools 2.x as a starting basis, or to 
provide a really good tutorial on the basics of pattern matching, you 
can look the public domain clips manual for pointers here. It's not 
money we need, its time, YOUR time :)

If you want to use a helper class it must be in a return value, 
predicate or eval - none of which are currently indexed. return value 
and predicate must also be time constant, eval does not have to be.

Mark
Michael Suzio wrote:
> I see this in the docs:
>
> "A Predicate constraint can use any valid Java expression as long as 
> it evaluated to a primitive boolean - avoid using any Drools keywords 
> as Declaration identifiers. Previously bound declarations can be used 
> in the expression. Functions used in a Predicate Constraint must 
> return time constant results."
>
> and under the discussion of 'eval':
>
> "Evals cannot be indexed and thus are not as optimal as using Field 
> Constraints."
>
> and this in general discussion of constraints and accessors of your 
> objects used in them:
>
> "Do please make sure that you are accessing methods that take no 
> parameters, and are in-fact "accessors" (as in, they don't change the 
> state of the object in a way that may effect the rules - remember that 
> the rule engine effectively caches the results of its matching 
> inbetween invocations to make it faster)."
>
> So, if invoking a helper method is like an eval, I'm thinking Drools 
> computes the match, but then throws it away because it knows this is 
> not a constant expression.  Whereas, if it were just a match of an 
> accessor's value vs. a constant String, it could cache that.
>
> I'm wildly speculating, only because I want to understand fully what 
> is happening, so I'm throwing stuff out there so the Drools team will 
> have to correct my misapprehensions before I confuse the whole list 
> (*g*).  Sometimes reading the Drools documentation is like a Talmudic 
> scholar trying to find the deeper meaning of the sacred words...  as 
> much as I want the 3.2 milestone, I want real documentation even more 
> (and *hint hint* -- would probably be willing to pay for it, guys!  
> Can we get an O'Reilly book?)
>
>   --- Michael
>
> On 2/12/07, *Steven Williams* <stevenw at objectconsulting.com.au 
> <mailto:stevenw at objectconsulting.com.au>> wrote:
>
>     I believe there is a caveat on functions and helper methods called
>     from the LHS that they need to be constant over time (or at least
>     over the life of the working memory) which then allows matches to
>     be computed as per normal.
>
>     Steve
>
>
>     On 2/13/07, *Michael Suzio* < msuzio at gmail.com
>     <mailto:msuzio at gmail.com>> wrote:
>
>         The JBoss guys can correct me if I'm wrong, but although I
>         think that works, what you've just done is eliminate any
>         chance to precompute matches and trim down the checks that
>         need to happen to find a rule match.  Since the engine can't
>         know that Helper.transform("value") returns a constant value,
>         it has to re-run that every time and it has to reject for
>         matches to the rule constraint every time.
>
>         I'm sure this would really sink performance, in other words. 
>         You can easily see the effect -- write the rule this way and
>         time it, and then write it with the return value of
>         Helper.transform being inlined, and I'm sure there's a big
>         difference.  It's the same as any other eval(...) situation in
>         Drools; possible, but not good for performance.
>
>
>         On 2/12/07, *Olenin, Vladimir (MOH)*
>         <Vladimir.Olenin at moh.gov.on.ca
>         <mailto:Vladimir.Olenin at moh.gov.on.ca>> wrote:
>
>             Hi,
>
>             I was wondering if calls to a Helper class are allowed in
>             LHS of the rule?
>             Eg:
>
>             Rule myRule
>             When
>                     MyObject(objField == Helper.transform("value"))
>             Then
>                    // smth
>             End
>
>
>             Thanks,
>
>             Vlad
>             _______________________________________________
>             rules-users mailing list
>             rules-users at lists.jboss.org
>             <mailto:rules-users at lists.jboss.org>
>             https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>         _______________________________________________
>         rules-users mailing list
>         rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>         https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
>     -- 
>     Steven Williams
>
>     Supervising Consultant
>
>     Object Consulting
>     Office: 8615 4500 Mob: 0439 898 668 Fax: 8615 4501
>     stevenw at objectconsulting.com.au
>     <mailto:stevenw at objectconsulting.com.au>
>     www.objectconsulting.com.au <http://www.objectconsulting.com.au>
>
>     consulting | development | training | support
>     our experience makes the difference
>     _______________________________________________
>     rules-users mailing list
>     rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>     https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070213/b9ec01ef/attachment.html 


More information about the rules-users mailing list