[rules-users] Request for assistance in removing eval from a rule

Edson Tirelli tirelli at post.com
Tue Sep 16 19:26:18 EDT 2008


  Are use setting the global in your application code?

2008/9/16 Warren, David [USA] <warren_david at bah.com>

>  Edson -
> Thank you very much for the reply.  I have one more question.  In the
> example below I changed RulesUtil to be a global name 'ruleUtil' (since its
> member variables do not change), and reran the rule (with
> the 'ruleUtil:RulesUtil()' line omitted).
>
> When I do this, and execute the rule below, I get a null pointer exception
> on PredicateConstraint.  The first and last parts of the stack trace are:
> org.drools.RuntimeDroolsException: Exception executing predicate
> com.bah.aims.rules.Rule_my_rule_0ReturnValue0Invoker at 36289b82
>  at
> org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:216)
>  at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:132)
>  at
> org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:318)
>  at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:140)
>  at
> org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:299)
>  at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:153)
> ...
> Caused by: java.lang.NullPointerException
>  at com.bah.aims.rules.Rule_my_rule__0.returnValue0(Rule_my_rule_0.java:27)
>  at
> com.bah.aims.rules.Rule_my_rule_0ReturnValue0Invoker.evaluate(Rule_myRule_0ReturnValue0Invoker.java:21)
>  at
> org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:210)
>  ... 29 more
>
> I'm not sure what is causing this.  Any thoughts?
> If it helps, RulesUtil.containsKeywordString()  checks to see if a string
> passed in is present in a list of keywords held in the class.
>
> Thanks -
> David
>
>
>  ------------------------------
> *From:* rules-users-bounces at lists.jboss.org [mailto:
> rules-users-bounces at lists.jboss.org] *On Behalf Of *Edson Tirelli
> *Sent:* Tuesday, September 16, 2008 9:56 AM
> *To:* Rules Users List
> *Subject:* Re: [rules-users] Request for assistance in removing eval from
> a rule
>
>
>    David,
>
>    Eval is really bad for perf, but still, sometimes it is the only way to
> do things like call methods. So, in your case, it all depends on what
> "containsKeywordString()" method is doing?
>
>    Also, is RulesUtil just a utility class? I mean with no data you reason
> over? if so, I strongly advise you to make it a global, instead of matching
> it in the rule like a fact.
>
>    Regarding evals, inline evals are just a bit lighter than top level
> evals, but there is an important difference:
>
> * inline evals MUST be time consistent, i.e., they must evaluate to the
> same value everytime they are called.
> * top level evals can deal with changes appropriately
>
>     []s
>     Edson
>
> 2008/9/15 Warren, David [USA] <warren_david at bah.com>
>
>>  Folks -
>>
>> After seeing the thread on evals hurting performance a couple of weeks
>> ago, I tried to remove them from a rule set we are using (running Drools
>> 4.0.4), and have had limited success.
>>
>> An example is shown below.  We're using evals every time we make a call to
>> "rulesUtil", a helper class we have for checking strings for keywords.  Two
>> questions:
>>
>> 1. Does using inline evals (like below) hurt performance as much as using
>> non-inline evals?
>> 2. If so, any thoughts for how to rewrite this rule to avoid using the
>> eval?
>>
>>
>> rule
>> 'my rule'
>> *salience* 790
>> *activation-group* "priorityRule"
>> *when*
>> ruleUtil : RulesUtil( )
>> s1 : Sensor( source == "X, $rfp : RFP , *eval*(
>> ruleUtil.containsKeywordString($rfp, "Y" )) , $tcn : TCN)
>> s2 : Sensor( TCN != $tcn, source == "Z"
>> *then*
>> System.out.println("my rule");
>> priority.setPriorityName("A");
>>
>> end
>>
>> Thanks,
>> David Warren
>>
>>  ------------------------------
>> *From:* rules-users-bounces at lists.jboss.org [mailto:
>> rules-users-bounces at lists.jboss.org] *On Behalf Of *Edson Tirelli
>> *Sent:* Friday, September 05, 2008 2:59 PM
>> *To:* Rules Users List
>> *Subject:* Re: [rules-users] Drools, Performance issues on 4.0.7 Vs 2.5
>>
>>
>>    Start by eliminating the evals and writing your constraints properly
>> inside the patterns. Drools 3+ is orders of magnitude faster than Drools
>> 2.x, but you need to leverage its power in your rules. Please read the
>> manual as the version 3 was a completely rewrite of version 2. Version 4 is
>> an improvement over 3.
>>
>>    As an example, look at this:
>> http://blog.athico.com/2006/11/rush-hour-and-content-based-routing.html
>>
>>    []s
>>    Edson
>>
>> 2008/9/5 Rout, Sushanta (ThoughtMill) <Sushanta.Rout at ihg.com>
>>
>>> We were using Drools 2.5 version earlier. Now we have switched to drools
>>> 4.0.7. But we see significant issues with performance like drools 4.0.7
>>> is three times slower than 2.5 . Has anybody encountered the issue?
>>>
>>> Here is a sample of the rule, we have some more similar to this.
>>> rule "test"
>>>        dialect "java"
>>>        activation-group "group1"
>>>        when
>>>                $croNumberDetailsRequest : CRONumberDetailsRequest()
>>>                $resdirectPhoneNumber : ResdirectPhoneNumber()
>>>                eval($resdirectPhoneNumber.getType().getId() == 5 &&
>>>
>>> $resdirectPhoneNumber.isValidForBrand($croNumberDetailsRequest.getBrand(
>>> )) &&
>>>                         $croNumberDetailsRequest.getRegion() != null &&
>>>
>>> $resdirectPhoneNumber.isValidRegion($croNumberDetailsRequest.getRegion()
>>> ) &&
>>>                         $croNumberDetailsRequest.getLocale() != null &&
>>>
>>>
>>> $resdirectPhoneNumber.isValidForLocaleId($croNumberDetailsRequest.getLoc
>>> ale()) &&
>>>
>>> $resdirectPhoneNumber.isValidSlot($croNumberDetailsRequest.getSlot()));
>>>
>>>        then
>>>                ResultList.add($resdirectPhoneNumber);
>>> end
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>
>>
>>
>> --
>> Edson Tirelli
>> JBoss Drools Core Development
>> JBoss, a division of Red Hat @ www.jboss.com
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
>
> --
> Edson Tirelli
> JBoss Drools Core Development
> JBoss, a division of Red Hat @ www.jboss.com
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20080916/e706d76a/attachment.html 


More information about the rules-users mailing list