[jboss-jira] [JBoss JIRA] (DROOLS-349) Accumulate.accumulate(Accumulate.java:182) NullPointerException
Geoffrey De Smet (JIRA)
issues at jboss.org
Fri Feb 14 09:37:29 EST 2014
[ https://issues.jboss.org/browse/DROOLS-349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12944720#comment-12944720 ]
Geoffrey De Smet commented on DROOLS-349:
-----------------------------------------
Mario, I managed to reproduce the issue on 6.1.0-SNAPSHOT as follows:
- Open optaplanner of master
- Open nurseRosteringScoreRules.drl and copy paste this at the end:
{code}
rule "arbeidsbreuk"
when
//System.out.println("arbeidsbreuk, Drools!");
ShiftAssignment($employee : employee, $shiftType : shiftType)
//count aantal shifts
$assignmentTotal : Number() from accumulate(
$assignment : ShiftAssignment(shiftType == $shiftType),
count($assignment)
)
//count aantal shifts per medewerker
$assignmentTotalEmployee : Number() from accumulate(
$assignmentEmployee : ShiftAssignment(employee == $employee, shiftType == $shiftType),
count($assignmentEmployee)
)
//count arbeidsbreuken van alle medewerkers
$arbeidsbreukTotal : Number() from accumulate(
//Employee($breuk : arbeidsbreuk),
ShiftAssignment(employee == $employee, shiftType == $shiftType),
sum($employee.getId())
)
then
scoreHolder.addSoftConstraintMatch(kcontext, -(Math.abs(($employee.getId().intValue() * $assignmentTotal.intValue()) - $assignmentTotalEmployee.intValue()) * (Math.abs(($employee.getId().intValue() * $assignmentTotal.intValue()) - $assignmentTotalEmployee.intValue()))) );
end
{code}
- run NurseRosteringapp, load sprint01.xml
- I throws:
{code}
Exception in thread "AWT-EventQueue-0" org.drools.core.RuntimeDroolsException: java.lang.NullPointerException
at org.drools.core.rule.Accumulate.accumulate(Accumulate.java:184)
at org.drools.core.phreak.PhreakAccumulateNode.addMatch(PhreakAccumulateNode.java:764)
at org.drools.core.phreak.PhreakAccumulateNode.doLeftInserts(PhreakAccumulateNode.java:168)
at org.drools.core.phreak.PhreakAccumulateNode.doNode(PhreakAccumulateNode.java:81)
at org.drools.core.phreak.RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:562)
at org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:533)
at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:334)
at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:161)
at org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:116)
at org.drools.core.phreak.RuleExecutor.reEvaluateNetwork(RuleExecutor.java:200)
at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:67)
at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:935)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1200)
at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:958)
at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:932)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:232)
at org.optaplanner.core.impl.score.director.drools.DroolsScoreDirector.calculateScore(DroolsScoreDirector.java:98)
at org.optaplanner.examples.common.business.SolutionBusiness.getScore(SolutionBusiness.java:175)
at org.optaplanner.examples.common.swingui.SolverAndPersistenceFrame.resetScreen(SolverAndPersistenceFrame.java:539)
at org.optaplanner.examples.common.swingui.SolverAndPersistenceFrame.setSolutionLoaded(SolverAndPersistenceFrame.java:510)
at org.optaplanner.examples.common.swingui.SolverAndPersistenceFrame.access$100(SolverAndPersistenceFrame.java:63)
at org.optaplanner.examples.common.swingui.SolverAndPersistenceFrame$QuickOpenAction.actionPerformed(SolverAndPersistenceFrame.java:216)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: java.lang.NullPointerException
at org.optaplanner.examples.nurserostering.solver.Rule_arbeidsbreuk341977412.accumulateExpression2(Rule_arbeidsbreuk341977412.java:23)
at org.optaplanner.examples.nurserostering.solver.Rule_arbeidsbreuk341977412AccumulateExpression2Invoker.evaluate(Rule_arbeidsbreuk341977412AccumulateExpression2Invoker.java:25)
at org.drools.core.base.accumulators.JavaAccumulatorFunctionExecutor.accumulate(JavaAccumulatorFunctionExecutor.java:109)
at org.drools.core.rule.Accumulate.accumulate(Accumulate.java:175)
... 57 more
{code}
> Accumulate.accumulate(Accumulate.java:182) NullPointerException
> ---------------------------------------------------------------
>
> Key: DROOLS-349
> URL: https://issues.jboss.org/browse/DROOLS-349
> Project: Drools
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Affects Versions: 6.0.0.CR1
> Environment: Windows 7 64 bit, Optaplanner 6.0.0.CR1, Java 1.7.0_17-b02
> Reporter: Nick Snels
> Assignee: Mario Fusco
>
> I reported my issue with a Drools rule in Optaplanner on the Drools user forum (http://drools.46999.n3.nabble.com/Optaplanner-rules-NullPointerException-td4026875.html). I was adviced to create a JIRA ticket.
> =============
> I am trying to accomplish the following, a part time employee (eg 50%) needs to do only half the shifts a full time employee needs to do. I have created a rule, that
> 1. count number of shifts of certain shiftType
> 2. count number of shifts of a certain shiftType per employee
> 3. count the total number of "arbeidsbreuken" per employee and within a certain shiftType
> 4. do something with these numbers so that an part time employee only gets half the shifts assigned that a full time employee gets
> The complete rule is:
> {code}
> rule "arbeidsbreuk"
> when
> //System.out.println("arbeidsbreuk, Drools!");
> ShiftAssignment($employee : employee, $shiftType : shiftType)
> //count aantal shifts
> $assignmentTotal : Number() from accumulate(
> $assignment : ShiftAssignment(shiftType == $shiftType),
> count($assignment)
> )
>
> //count aantal shifts per medewerker
> $assignmentTotalEmployee : Number() from accumulate(
> $assignmentEmployee : ShiftAssignment(employee == $employee, shiftType == $shiftType),
> count($assignmentEmployee)
> )
>
> //count arbeidsbreuken van alle medewerkers
> $arbeidsbreukTotal : Number() from accumulate(
> //Employee($breuk : arbeidsbreuk),
> ShiftAssignment(employee == $employee, shiftType == $shiftType),
> sum($employee.getArbeidsbreuk())
> )
> $assignmentTotalEmployee.intValue())
> then
> System.out.println("Arbeidsbreuk drools: " + $employee.getArbeidsbreuk() + " - " + $assignmentTotal.intValue() + " - " + $assignmentTotalEmployee.intValue() + " - " + $arbeidsbreukTotal);
> scoreHolder.addSoftConstraintMatch(kcontext, -(Math.abs(($employee.getArbeidsbreuk() * $assignmentTotal.intValue()) - $assignmentTotalEmployee.intValue()) * (Math.abs(($employee.getArbeidsbreuk() * $assignmentTotal.intValue()) - $assignmentTotalEmployee.intValue()))) );
> end
> {code}
> I get the following error:
> {code}
> Exception in thread "main" org.drools.core.RuntimeDroolsException: java.lang.NullPointerException
> at org.drools.core.rule.Accumulate.accumulate(Accumulate.java:182)
> at org.drools.core.phreak.PhreakAccumulateNode.addMatch(PhreakAccumulateNode.java:756)
> at org.drools.core.phreak.PhreakAccumulateNode.doLeftInserts(PhreakAccumulateNode.java:164)
> at org.drools.core.phreak.PhreakAccumulateNode.doNode(PhreakAccumulateNode.java:81)
> at org.drools.core.phreak.RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:524)
> at org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:494)
> at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:277)
> at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:161)
> at org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:116)
> at org.drools.core.phreak.RuleExecutor.reEvaluateNetwork(RuleExecutor.java:205)
> at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:65)
> at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:936)
> at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1183)
> at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:935)
> at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:909)
> at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:233)
> at org.optaplanner.core.impl.score.director.drools.DroolsScoreDirector.calculateScore(DroolsScoreDirector.java:98)
> at org.optaplanner.core.impl.solver.scope.DefaultSolverScope.calculateScore(DefaultSolverScope.java:101)
> at org.optaplanner.core.impl.bestsolution.BestSolutionRecaller.solvingStarted(BestSolutionRecaller.java:58)
> at org.optaplanner.core.impl.solver.DefaultSolver.solvingStarted(DefaultSolver.java:177)
> at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:154)
> at be.ocmwturnhout.permanenties.Main.main(Main.java:495)
> Caused by: java.lang.NullPointerException
> at be.ocmwturnhout.permanenties.solver.Rule_arbeidsbreuk654888368.accumulateExpression2(Rule_arbeidsbreuk654888368.java:23)
> at be.ocmwturnhout.permanenties.solver.Rule_arbeidsbreuk654888368AccumulateExpression2Invoker.evaluate(Rule_arbeidsbreuk654888368AccumulateExpression2Invoker.java:25)
> at org.drools.core.base.accumulators.JavaAccumulatorFunctionExecutor.accumulate(JavaAccumulatorFunctionExecutor.java:107)
> at org.drools.core.rule.Accumulate.accumulate(Accumulate.java:173)
> ... 21 more
> {code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list