[jboss-jira] [JBoss JIRA] (DROOLS-39) A NPE occurs silently when execute a complex rule a lot of time
Jérémy SOULA (JIRA)
jira-events at lists.jboss.org
Wed Feb 13 08:21:56 EST 2013
Jérémy SOULA created DROOLS-39:
----------------------------------
Summary: A NPE occurs silently when execute a complex rule a lot of time
Key: DROOLS-39
URL: https://issues.jboss.org/browse/DROOLS-39
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Affects Versions: 5.5
Environment: Windows XP, java 1.5
Reporter: Jérémy SOULA
Assignee: Mark Proctor
Found this bug when I update from drools v5.3
Here are the rule that simulate this bug :
{noformat}
rule "toto"
when
$bean:Bean (
anotherBean!=null,
(
anotherBean.anotherBean !=null
&&
(
(
anotherBean.anotherBean.attribute=="TOTO"
&&
anotherBean.attribute=="TOTO"
)
||
(
anotherBean.anotherBean.attribute=="TATA"
&&
anotherBean.attribute=="TATA"
)
)
)
||
(
anotherBean.attribute=="TOTO"
)
)
then
...
end
{noformat}
A part of main:
{noformat}
for (int i = 0; i < 400; i++) {
Bean input1 = new Bean();
input1.setAttribute("" + i);
input1.setAnotherBean(new Bean());
kbase.newStatelessKnowledgeSession().execute(Arrays.asList(input1));
}
{noformat}
At one time, the log print this exception. Units tests of my application are 100%, but this exception in the log is quite disturbing
{noformat}java.lang.RuntimeException: cannot invoke getter: getAnotherBean [declr.class: fr.jsoula.jboss.drools.bugs.npe.Bean; act.class: fr.jsoula.jboss.drools.bugs.npe.Bean] (see trace)
at org.mvel2.optimizers.impl.refl.nodes.GetterAccessor.getValue(GetterAccessor.java:74)
at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:108)
at org.mvel2.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.java:108)
at org.mvel2.ast.And.getReducedValueAccelerated(And.java:34)
at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85)
at org.mvel2.compiler.CompiledExpression.getDirectValue(CompiledExpression.java:123)
at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:119)
at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:113)
at org.mvel2.MVEL.executeExpression(MVEL.java:930)
at org.drools.rule.constraint.MvelConditionEvaluator.evaluate(MvelConditionEvaluator.java:70)
at org.drools.rule.constraint.MvelConditionEvaluator.ensureBranchEvaluation(MvelConditionEvaluator.java:117)
at org.drools.rule.constraint.MvelConditionEvaluator.ensureCompleteEvaluation(MvelConditionEvaluator.java:101)
at org.drools.rule.constraint.MvelConditionEvaluator.ensureBranchEvaluation(MvelConditionEvaluator.java:120)
at org.drools.rule.constraint.MvelConditionEvaluator.ensureCompleteEvaluation(MvelConditionEvaluator.java:102)
at org.drools.rule.constraint.MvelConditionEvaluator.ensureBranchEvaluation(MvelConditionEvaluator.java:120)
at org.drools.rule.constraint.MvelConditionEvaluator.ensureCompleteEvaluation(MvelConditionEvaluator.java:101)
at org.drools.rule.constraint.MvelConditionEvaluator.ensureCompleteEvaluation(MvelConditionEvaluator.java:90)
at org.drools.rule.constraint.MvelConditionEvaluator.getAnalyzedCondition(MvelConditionEvaluator.java:82)
at org.drools.rule.constraint.MvelConstraint.executeJitting(MvelConstraint.java:270)
at org.drools.rule.constraint.MvelConstraint.access$200(MvelConstraint.java:51)
at org.drools.rule.constraint.MvelConstraint$ConditionJitter.run(MvelConstraint.java:250)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676)
at java.lang.Thread.run(Thread.java:595)
31
Caused by: java.lang.RuntimeException: cannot invoke getter: getAnotherBean [declr.class: fr.jsoula.jboss.drools.bugs.npe.Bean; act.class: fr.jsoula.jboss.drools.bugs.npe.Bean] (see trace)
at org.mvel2.optimizers.impl.refl.nodes.GetterAccessor.getValue(GetterAccessor.java:74)
at org.mvel2.optimizers.impl.refl.nodes.GetterAccessor.getValue(GetterAccessor.java:40)
... 23 more
Caused by: java.lang.RuntimeException: unable to invoke method: fr.jsoula.jboss.drools.bugs.npe.Bean.getAttribute: target of method is null
at org.mvel2.optimizers.impl.refl.nodes.GetterAccessor.getValue(GetterAccessor.java:66)
at org.mvel2.optimizers.impl.refl.nodes.GetterAccessor.getValue(GetterAccessor.java:40)
... 24 more
Caused by: java.lang.NullPointerException
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:592)
at org.mvel2.optimizers.impl.refl.nodes.GetterAccessor.getValue(GetterAccessor.java:43)
... 25 more
{noformat}
--
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