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

Mark Proctor mproctor at codehaus.org
Tue Feb 13 16:49:32 EST 2007


In theory they can be indexed, but we havne't done it yet, no idea when 
we'll get time. Patches welcome :)

Mark
Olenin, Vladimir (MOH) wrote:
>
> Thanks, Mark. Are there any plans on making return value, predicate 
> and eval expressions indexable (in case it is possible at all)? Would 
> it be included in 3.2 release? I understand that DROOLS can not 
> guarantee that helper method will return the same value each time and 
> probably that's why excludes such cases from index, but the same goes 
> for 'getters' of the fact objects -- DROOLS can't guarantee the getter 
> will return the same value each time, so it just have to assume it 
> (and it is outlined in the documentation).
>
>  
>
> There are a few use case that might need this kind of functionality, 
> eg to cache the results of 'associative' lookup. Especially for the 
> 'Decision Tables'. The problem I'm facing right now is I need to 
> 'expand' the list of codes based on some id and use those codes as 
> constraint:
>
>  
>
>             MyObject(field <= LookupMap.getCodes($param))
>
>  
>
> Where $param is a value from Decision Table data. In this particular 
> case a set of, say 100 codes, can be described with a simple ID. For 
> more complex cases a pseudo 'set select' expression can be passed as a 
> parameter (eg, LookupMap.getCodes("groupId_1 -- grouperId_2"), which 
> should return the intersection of codes in groupId_1 and groupId_2). 
> In any case, the <key, value> pairs returned by LookupMap class would 
> remain the same.
>
>  
>
> Vlad
>
>  
>
> ------------------------------------------------------------------------
>
> *From:* rules-users-bounces at lists.jboss.org 
> [mailto:rules-users-bounces at lists.jboss.org] *On Behalf Of *Mark Proctor
> *Sent:* 12 February 2007 19:16
> *To:* Rules Users List
> *Subject:* Re: [rules-users] calls to 'Helper' classes in LHS - are 
> they allowed?
>
>  
>
> 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 <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/63d245b5/attachment.html 


More information about the rules-users mailing list