[rules-users] Accumulator - Syntax question

Joseph Berdat joseph.berdat at finaware.ch
Thu Sep 3 17:39:02 EDT 2009


Hello,

In attachment there are a DRL file and java test case which causes the  
NPE mentionned below.

Thanks,
Regards

Exception in thread "main" java.lang.NullPointerException
	at  
org 
.drools 
.rule.builder.PatternBuilder.buildRestriction(PatternBuilder.java:948)
	at  
org 
.drools 
.rule.builder.PatternBuilder.buildRestriction(PatternBuilder.java:727)
	at  
org 
.drools 
.rule.builder.PatternBuilder.createRestriction(PatternBuilder.java:504)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java: 
351)
	at  
org 
.drools 
.rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:239)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java: 
196)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java: 
104)
	at  
org 
.drools 
.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
	at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:68)
	at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1159)
	at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java: 
649)
	at  
org 
.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java: 
290)
	at  
org 
.drools 
.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:488)
	at  
org 
.drools 
.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:25)
	at TestQuote.executeRule(TestQuote.java:37)
	at TestQuote.main(TestQuote.java:19)



Le 3 sept. 09 à 22:06, PlugTree a écrit :

> hmmm seems we met a bug here. post it to the list to see if anyone  
> knows something about it. If not I'll dig into the code to see the  
> problem.
>
> Thanks!
> CEO
> plugtree.com
>
> Joseph Berdat wrote:
>> Hello,
>>
>> I've tried you proposition:
>> $quote : Quote(value > (Double() from accumulate( Quote( $price :  
>> value ), average( $price ) ) ))
>> Unfortunatly, it produces the following error:
>> java.lang.NullPointerException
>> at  
>> org 
>> .drools 
>> .rule.builder.PatternBuilder.buildRestriction(PatternBuilder.java: 
>> 948)
>> at  
>> org 
>> .drools 
>> .rule.builder.PatternBuilder.buildRestriction(PatternBuilder.java: 
>> 727)
>> at  
>> org 
>> .drools 
>> .rule.builder.PatternBuilder.createRestriction(PatternBuilder.java: 
>> 504)
>> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java: 
>> 351)
>> at  
>> org 
>> .drools 
>> .rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:239)
>> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java: 
>> 196)
>> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java: 
>> 104)
>> at  
>> org 
>> .drools 
>> .rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
>> at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:68)
>> at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java: 
>> 1159)
>> at  
>> org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java: 
>> 649)
>> at  
>> org 
>> .drools 
>> .compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:290)
>> at  
>> org 
>> .drools 
>> .compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java: 
>> 488)
>> at  
>> org 
>> .drools 
>> .builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:25)
>> at  
>> home.prototype.business.service.QuoteTest.loadRule(QuoteTest.java:62)
>> at home.prototype.business.service.QuoteTest.test1(QuoteTest.java:35)
>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> at  
>> sun 
>> .reflect 
>> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> at  
>> sun 
>> .reflect 
>> .DelegatingMethodAccessorImpl 
>> .invoke(DelegatingMethodAccessorImpl.java:25)
>> at java.lang.reflect.Method.invoke(Method.java:585)
>> at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
>> at  
>> org 
>> .junit 
>> .internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
>> at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java: 
>> 79)
>> at  
>> org 
>> .junit 
>> .internal 
>> .runners 
>> .MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
>> at  
>> org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
>> at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
>> at  
>> org 
>> .junit 
>> .internal 
>> .runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java: 
>> 88)
>> at  
>> org 
>> .junit 
>> .internal 
>> .runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
>> at org.junit.internal.runners.JUnit4ClassRunner 
>> $1.run(JUnit4ClassRunner.java:44)
>> at  
>> org 
>> .junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java: 
>> 27)
>> at  
>> org 
>> .junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
>> at  
>> org 
>> .junit 
>> .internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
>> at  
>> org 
>> .eclipse 
>> .jdt 
>> .internal 
>> .junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
>> at  
>> org 
>> .eclipse 
>> .jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>> at  
>> org 
>> .eclipse 
>> .jdt 
>> .internal 
>> .junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
>> at  
>> org 
>> .eclipse 
>> .jdt 
>> .internal 
>> .junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
>> at  
>> org 
>> .eclipse 
>> .jdt 
>> .internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java: 
>> 386)
>> at  
>> org 
>> .eclipse 
>> .jdt 
>> .internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java: 
>> 196)
>>
>> Regards,
>>
>> Le 3 sept. 09 à 10:52, Plug Tree Labs a écrit :
>>
>>> Joseph:
>>>
>>> I think you should need something like this:
>>>
>>> $quote : Quote(value > (Double() from accumulate( Quote( $price :  
>>> value ), average( $price ) )))
>>>
>>> What do you think?
>>>
>>> joseph berdat wrote:
>>>> Hello,
>>>> The rule below check which quote have a price above the average.
>>>> In this form the rule is working, but from the log files it seems  
>>>> that this rule is doing a cross join.
>>>> rule "above average value"
>>>> dialect "mvel"
>>>> when
>>>>        Double( $average : doubleValue) from  
>>>> accumulate( Quote( $price : value ), average( $price ) )
>>>> $quote : Quote(value > $average)
>>>> then
>>>>    System.out.println("Quote above average [" + $quote.id + "]  
>>>> value [" + $quote.value + "]  average [" + $average + "]")
>>>> end
>>>> I could not get the correct syntax. I would like to write  
>>>> something like:
>>>> when Quote(value > doubleValue) from accumulate( Quote( $price :  
>>>> value ), average( $price ) )
>>>> Thanks,
>>>> regards.
>>>> ------------------------------------------------------------------------
>>>> _______________________________________________
>>>> 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
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090903/1f243184/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: rule.drl
Type: application/octet-stream
Size: 976 bytes
Desc: not available
Url : http://lists.jboss.org/pipermail/rules-users/attachments/20090903/1f243184/attachment.obj 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090903/1f243184/attachment-0001.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: TestQuote.java
Type: application/octet-stream
Size: 1818 bytes
Desc: not available
Url : http://lists.jboss.org/pipermail/rules-users/attachments/20090903/1f243184/attachment-0001.obj 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090903/1f243184/attachment-0002.html 


More information about the rules-users mailing list