[jboss-jira] [JBoss JIRA] (DROOLS-185) ClassCastException at ConditionEvaluator
Gurinder Randhawa (JIRA)
issues at jboss.org
Sat Feb 22 19:05:47 EST 2014
[ https://issues.jboss.org/browse/DROOLS-185?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12947084#comment-12947084 ]
Gurinder Randhawa commented on DROOLS-185:
------------------------------------------
Davide,
We are seeing another exception being thrown when inserting facts into statefulsession, can you help us pinpoint rules when condition pattern based on stack trace below, we are running drools 5.6.0.
2014-02-22 15:22:22,208 ERROR [STDERR] Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
2014-02-22 15:22:22,208 ERROR [STDERR] at ConditionEvaluatord44a08bed9d34bcd99fd1dacfc35bfd1.evaluate(Unknown Source)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:218)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.rule.constraint.MvelConstraint.isAllowedCachedLeft(MvelConstraint.java:187)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.common.TripleBetaConstraints.isAllowedCachedLeft(TripleBetaConstraints.java:91)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.JoinNode.propagateFromLeft(JoinNode.java:104)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:94)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:196)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:71)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.JoinNode.propagateFromRight(JoinNode.java:158)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.JoinNode.assertObject(JoinNode.java:147)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:137)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:497)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:382)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:137)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:137)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:497)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:382)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:302)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:254)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:366)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:327)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:950)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:894)
2014-02-22 15:22:22,208 ERROR [STDERR] at tu.venture.domain.interfaces.RulesRequestProcessor.processByStatefullSession(RulesRequestProcessor.java:118)
2014-02-22 15:22:22,208 ERROR [STDERR] at tu.venture.sales.ejb.business.SalesPriceProcessor.process(SalesPriceProcessor.java:163)
2014-02-22 15:22:22,208 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2014-02-22 15:22:22,208 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
2014-02-22 15:22:22,208 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
2014-02-22 15:22:22,208 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:597)
2014-02-22 15:22:22,208 ERROR [STDERR] at org.jboss.seam.util.Reflections.invoke(Reflections.java:22)
> ClassCastException at ConditionEvaluator
> ----------------------------------------
>
> Key: DROOLS-185
> URL: https://issues.jboss.org/browse/DROOLS-185
> Project: Drools
> Issue Type: Bug
> Security Level: Public(Everyone can see)
> Affects Versions: 5.5.0.Final
> Reporter: Sergey Alaev
> Assignee: Mario Fusco
>
> Stacktrace:
> Caused by: java.lang.ClassCastException: ***** cannot be cast to ******
> at ConditionEvaluator443abf2927ca4f64a4ad86407ae34799.evaluate(Unknown Source)
> at org.drools.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:200)
> at org.drools.rule.constraint.MvelConstraint.isAllowed(MvelConstraint.java:157)
> at org.drools.reteoo.FromNode.checkConstraintsAndPropagate(FromNode.java:318)
> at org.drools.reteoo.FromNode.assertLeftTuple(FromNode.java:164)
> at org.drools.reteoo.CompositeLeftTupleSinkAdapter.doPropagateAssertLeftTuple(CompositeLeftTupleSinkAdapter.java:232)
> at org.drools.reteoo.CompositeLeftTupleSinkAdapter.createAndPropagateAssertLeftTuple(CompositeLeftTupleSinkAdapter.java:116)
> at org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:154)
> at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
> Reason:
> ConditionEvaluator seems to be using lazy initializing and then caches generated class to evaluate this expression with another arguments.
> Given following:
> interface A {
> String getString();
> }
> interface B {
> String getString();
> }
> class X implements B, A {}
> class Y implements A{}
> rule "test rule"
> when:
> A(string != null)
> then:
> end
> When rule engine is called for the first time with instance of class X, ConditionEvaluator will bind itself to first found interface implementing method getString(), i.e. interface B.
> Thus second call with instance of class Y will cause ClassCastException of casting Y to B.
> Solution: force MVEL to bind bytecode generated methods to class/interface declared in the rule explicitly, in our case - to interface A.
> Quickfix: use following declaration of class X:
> class X implements A, B {}
> Because ConditionEvaluator binds to first available interface, it will bind now to correct interface - to interface A.
--
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