[jboss-jira] [JBoss JIRA] Updated: (JBRULES-2751) NullPointerException in DeclarationTypeFixer: An rule compilation error should give a clear errow warning with an indication of which rule is the culprit instead of a NPE

Geoffrey De Smet (JIRA) jira-events at lists.jboss.org
Tue May 17 04:47:01 EDT 2011


     [ https://issues.jboss.org/browse/JBRULES-2751?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Geoffrey De Smet updated JBRULES-2751:
--------------------------------------

    Description: 
Update 17-MAY-2011: just verified if it's still a problem in 5.2.0.CR1-SNAPSHOT and it is.

To reproduce:
- Open org.drools.planner.examples.cloudbalancing.domain.CloudAssignment
- Comment out public int getMinimalCpuPower()
- Run org.drools.planner.examples.app.DroolsPlannerExamplesApp, click button cloud computing

{code}
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at org.drools.rule.builder.dialect.java.DeclarationTypeFixer.fix(DeclarationTypeFixer.java:9)
	at org.drools.rule.builder.dialect.java.AbstractJavaRuleBuilder.createVariableContext(AbstractJavaRuleBuilder.java:102)
	at org.drools.rule.builder.dialect.java.JavaAccumulateBuilder.generateFunctionCallCodeTemplate(JavaAccumulateBuilder.java:210)
	at org.drools.rule.builder.dialect.java.JavaAccumulateBuilder.buildExternalFunctionCall(JavaAccumulateBuilder.java:171)
	at org.drools.rule.builder.dialect.java.JavaAccumulateBuilder.build(JavaAccumulateBuilder.java:95)
	at org.drools.rule.builder.dialect.java.JavaAccumulateBuilder.build(JavaAccumulateBuilder.java:62)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:262)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:66)
	at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:65)
	at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:81)
	at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1615)
	at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:692)
	at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:298)
	at org.drools.planner.config.AbstractSolverConfig.buildRuleBase(AbstractSolverConfig.java:155)
	at org.drools.planner.config.AbstractSolverConfig.configureAbstractSolver(AbstractSolverConfig.java:130)
	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildSolver(LocalSearchSolverConfig.java:101)
	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildSolver(LocalSearchSolverConfig.java:33)
	at org.drools.planner.config.XmlSolverConfigurer.buildSolver(XmlSolverConfigurer.java:92)
	at org.drools.planner.examples.cloudbalancing.app.CloudBalancingApp.createSolver(CloudBalancingApp.java:40)
	at org.drools.planner.examples.common.app.CommonApp.createSolutionBusiness(CommonApp.java:56)
	at org.drools.planner.examples.common.app.CommonApp.<init>(CommonApp.java:35)
	at org.drools.planner.examples.cloudbalancing.app.CloudBalancingApp.<init>(CloudBalancingApp.java:27)
	at org.drools.planner.examples.app.DroolsPlannerExamplesApp$5.actionPerformed(DroolsPlannerExamplesApp.java:78)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6289)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6054)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4652)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4482)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4482)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
	at java.awt.EventQueue.access$000(EventQueue.java:85)
	at java.awt.EventQueue$1.run(EventQueue.java:603)
	at java.awt.EventQueue$1.run(EventQueue.java:601)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:617)
	at java.awt.EventQueue$2.run(EventQueue.java:615)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
{code}

CloudAssignment did not have a getter for minimalCpuPower yet.
The compilation error should clearly say that its the rule minimalCpuPowerTotal which has a problem and that the getter for the field minimalCpuPower wasn't found.

  was:
{code}
Exception in thread "main" java.lang.NullPointerException
	at org.drools.rule.builder.dialect.java.DeclarationTypeFixer.fix(DeclarationTypeFixer.java:17)
	at org.drools.rule.builder.dialect.java.AbstractJavaRuleBuilder.createVariableContext(AbstractJavaRuleBuilder.java:90)
	at org.drools.rule.builder.dialect.java.JavaAccumulateBuilder.build(JavaAccumulateBuilder.java:112)
	at org.drools.rule.builder.dialect.java.JavaAccumulateBuilder.build(JavaAccumulateBuilder.java:54)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:223)
	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:108)
	at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)
	at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:79)
	at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1149)
	at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:631)
	at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:270)
	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildRuleBase(LocalSearchSolverConfig.java:209)
	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildSolver(LocalSearchSolverConfig.java:186)
	at org.drools.planner.config.XmlSolverConfigurer.buildSolver(XmlSolverConfigurer.java:93)
	at org.drools.planner.examples.cloudbalancing.app.CloudBalancingApp.createSolver(CloudBalancingApp.java:43)
	at org.drools.planner.examples.common.app.CommonApp.createSolutionBusiness(CommonApp.java:59)
	at org.drools.planner.examples.common.app.CommonApp.<init>(CommonApp.java:38)
	at org.drools.planner.examples.cloudbalancing.app.CloudBalancingApp.<init>(CloudBalancingApp.java:30)
	at org.drools.planner.examples.cloudbalancing.app.CloudBalancingApp.main(CloudBalancingApp.java:36)
	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:597)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)
{code}

Here's the rule which causes this:
{code}
rule "minimalCpuPowerTotal"
    when
        $cloudComputer : CloudComputer($cpuPower : cpuPower)
        $minimalCpuPowerTotal : Number(intValue > $cpuPower) from accumulate(
            CloudAssignment(
                cloudComputer == $cloudComputer,
                $minimalCpuPower : minimalCpuPower), // This is the problem, CloudAssignment.getMinimalCpuPower does not exist yet
            sum($minimalCpuPower)
        )
    then
        insertLogical(new IntConstraintOccurrence("minimalCpuPowerTotal", ConstraintType.NEGATIVE_HARD,
                $minimalCpuPowerTotal - $cpuPower,
                $cloudComputer));
end
{code}

CloudAssignment did not have a getter for minimalCpuPower yet.
The compilation error should clearly say that its the rule minimalCpuPowerTotal which has a problem and that the getter for the field minimalCpuPower wasn't found.



> NullPointerException in DeclarationTypeFixer: An rule compilation error should give a clear errow warning with an indication of which rule is the culprit instead of a NPE
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: JBRULES-2751
>                 URL: https://issues.jboss.org/browse/JBRULES-2751
>             Project: Drools
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: drools-compiler (expert)
>    Affects Versions: 5.1.1.FINAL
>            Reporter: Geoffrey De Smet
>            Assignee: Edson Tirelli
>             Fix For: 5.2.0.CR1
>
>
> Update 17-MAY-2011: just verified if it's still a problem in 5.2.0.CR1-SNAPSHOT and it is.
> To reproduce:
> - Open org.drools.planner.examples.cloudbalancing.domain.CloudAssignment
> - Comment out public int getMinimalCpuPower()
> - Run org.drools.planner.examples.app.DroolsPlannerExamplesApp, click button cloud computing
> {code}
> Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
> 	at org.drools.rule.builder.dialect.java.DeclarationTypeFixer.fix(DeclarationTypeFixer.java:9)
> 	at org.drools.rule.builder.dialect.java.AbstractJavaRuleBuilder.createVariableContext(AbstractJavaRuleBuilder.java:102)
> 	at org.drools.rule.builder.dialect.java.JavaAccumulateBuilder.generateFunctionCallCodeTemplate(JavaAccumulateBuilder.java:210)
> 	at org.drools.rule.builder.dialect.java.JavaAccumulateBuilder.buildExternalFunctionCall(JavaAccumulateBuilder.java:171)
> 	at org.drools.rule.builder.dialect.java.JavaAccumulateBuilder.build(JavaAccumulateBuilder.java:95)
> 	at org.drools.rule.builder.dialect.java.JavaAccumulateBuilder.build(JavaAccumulateBuilder.java:62)
> 	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:262)
> 	at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:66)
> 	at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:65)
> 	at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:81)
> 	at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:1615)
> 	at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:692)
> 	at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:298)
> 	at org.drools.planner.config.AbstractSolverConfig.buildRuleBase(AbstractSolverConfig.java:155)
> 	at org.drools.planner.config.AbstractSolverConfig.configureAbstractSolver(AbstractSolverConfig.java:130)
> 	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildSolver(LocalSearchSolverConfig.java:101)
> 	at org.drools.planner.config.localsearch.LocalSearchSolverConfig.buildSolver(LocalSearchSolverConfig.java:33)
> 	at org.drools.planner.config.XmlSolverConfigurer.buildSolver(XmlSolverConfigurer.java:92)
> 	at org.drools.planner.examples.cloudbalancing.app.CloudBalancingApp.createSolver(CloudBalancingApp.java:40)
> 	at org.drools.planner.examples.common.app.CommonApp.createSolutionBusiness(CommonApp.java:56)
> 	at org.drools.planner.examples.common.app.CommonApp.<init>(CommonApp.java:35)
> 	at org.drools.planner.examples.cloudbalancing.app.CloudBalancingApp.<init>(CloudBalancingApp.java:27)
> 	at org.drools.planner.examples.app.DroolsPlannerExamplesApp$5.actionPerformed(DroolsPlannerExamplesApp.java:78)
> 	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
> 	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
> 	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
> 	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
> 	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
> 	at java.awt.Component.processMouseEvent(Component.java:6289)
> 	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
> 	at java.awt.Component.processEvent(Component.java:6054)
> 	at java.awt.Container.processEvent(Container.java:2041)
> 	at java.awt.Component.dispatchEventImpl(Component.java:4652)
> 	at java.awt.Container.dispatchEventImpl(Container.java:2099)
> 	at java.awt.Component.dispatchEvent(Component.java:4482)
> 	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
> 	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
> 	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
> 	at java.awt.Container.dispatchEventImpl(Container.java:2085)
> 	at java.awt.Window.dispatchEventImpl(Window.java:2478)
> 	at java.awt.Component.dispatchEvent(Component.java:4482)
> 	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
> 	at java.awt.EventQueue.access$000(EventQueue.java:85)
> 	at java.awt.EventQueue$1.run(EventQueue.java:603)
> 	at java.awt.EventQueue$1.run(EventQueue.java:601)
> 	at java.security.AccessController.doPrivileged(Native Method)
> 	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
> 	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
> 	at java.awt.EventQueue$2.run(EventQueue.java:617)
> 	at java.awt.EventQueue$2.run(EventQueue.java:615)
> 	at java.security.AccessController.doPrivileged(Native Method)
> 	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
> 	at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
> 	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
> 	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
> 	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
> 	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
> 	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
> 	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
> {code}
> CloudAssignment did not have a getter for minimalCpuPower yet.
> The compilation error should clearly say that its the rule minimalCpuPowerTotal which has a problem and that the getter for the field minimalCpuPower wasn't found.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-jira mailing list