ClassCastException after running rules for a while in BRMS
Issue
- I get ClassCastException after running rules for a while
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.math.BigDecimal
at ConditionEvaluator96bc4b8b5b1e4ac8ade8d7dc9012e0c6.evaluate(Unknown Source)
at org.drools.core.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:248)
at org.drools.core.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:204)
at org.drools.core.reteoo.AlphaNode.assertObject(AlphaNode.java:141)
at org.drools.core.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:494)
at org.drools.core.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:384)
at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:298)
at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:93)
at org.drools.reteoo.common.RetePropagationList.addEntry(RetePropagationList.java:36)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.addPropagation(StatefulKnowledgeSessionImpl.java:1989)
at org.drools.reteoo.common.ReteWorkingMemory.addPropagation(ReteWorkingMemory.java:229)
at org.drools.core.reteoo.EntryPointNode.assertObject(EntryPointNode.java:224)
at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:277)
at org.drools.core.common.NamedEntryPoint.insert(NamedEntryPoint.java:237)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:1465)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.insert(StatefulKnowledgeSessionImpl.java:1420)
I understand that my rule condition calls a method with an incompatible class argument. But I'd like to know why it happens only after running for a while.
when
$model : Model($model.isZero($model.getIntegerValue()))
then
...
public class Model {
private Integer integerValue;
public Integer getIntegerValue() {
return integerValue;
}
public void setIntegerValue(Integer integerValue) {
this.integerValue = integerValue;
}
public static boolean isZero(BigDecimal value) {
if (value.compareTo(BigDecimal.ZERO) == 0) {
return true;
}
return false;
}
}
Environment
- Red Hat JBoss BRMS
- 6.0.3
- 6.2.0
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
