ClassCastException after running rules for a while in BRMS

Solution Unverified - Updated -

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.

Current Customers and Partners

Log in for full access

Log In
Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.