[rules-users] [rules-dev] [Bug] 5.5.0 Correctly compiled DRL runs into run time error: "incompatible types"

Mario Fusco mario.fusco at gmail.com
Mon Feb 18 10:02:57 EST 2013


Hi Wolfgang,

thanks for having reported this.
I fixed it in mvel and as usual the fix will be available with the next
mvel release.

Cheers,
Mario

On Sun, Feb 17, 2013 at 5:32 PM, Wolfgang Laun <wolfgang.laun at gmail.com>wrote:

> Below is a fully self-contained DRL that compiles correctly but runs
> into a runtime error when the LHS of rule "match" is evaluated. The
> "culprit" is the test "this != $c", but one would expect simply a true
> result from the comparison.
>
> declare Person
>   name: String
> end
> declare Customer
> extends Person
>   rating: int
> end
> declare Employee
> extends Person
>   wage: int
> end
>
> rule initphone
> salience 100
> when
> then
>     insert( new Customer( "Joe", 100 ) );
>     insert( new Employee( "Paul", 2100 ) );
> end
>
> rule match
> when
>     $c: Customer()
>     $e: Employee( this != $c )
> then
>     System.out.println( "c/e " + $c + " " + $e );
> end
>
> Exception in thread "main" Exception executing consequence for rule
> "initphone" in express: [Error: incompatible types in statement: class
> express.Customer (compared from: class express.Employee)]
> [Near : {... this != $c ....}]
>              ^
> [Line: 1, Column: 1]
>         at
> org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
>         at
> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1297)
>         at
> org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1221)
>         at
> org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1456)
>         at
> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:710)
>         at
> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:674)
>         at
> org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:230)
>         at express.Main.execute(Main.java:92)
>         at express.Main.main(Main.java:126)
> Caused by: [Error: incompatible types in statement: class
> express.Customer (compared from: class express.Employee)]
> [Near : {... this != $c ....}]
>              ^
> [Line: 1, Column: 1]
>         at org.mvel2.ast.BinaryOperation.<init>(BinaryOperation.java:84)
>         at
> org.mvel2.util.CompilerTools.finalizePayload(CompilerTools.java:118)
>         at
> org.mvel2.compiler.ExpressionCompiler._compile(ExpressionCompiler.java:287)
>         at
> org.mvel2.compiler.ExpressionCompiler.compile(ExpressionCompiler.java:62)
>         at org.mvel2.MVEL.compileExpression(MVEL.java:810)
>         at
> org.drools.base.mvel.MVELCompilationUnit.compile(MVELCompilationUnit.java:435)
>         at
> org.drools.base.mvel.MVELCompilationUnit.getCompiledExpression(MVELCompilationUnit.java:238)
>         at
> org.drools.rule.constraint.MvelConstraint.createMvelConditionEvaluator(MvelConstraint.java:206)
>         at
> org.drools.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:190)
>         at
> org.drools.rule.constraint.MvelConstraint.isAllowedCachedRight(MvelConstraint.java:184)
>         at
> org.drools.common.SingleBetaConstraints.isAllowedCachedRight(SingleBetaConstraints.java:134)
>         at org.drools.reteoo.JoinNode.propagateFromRight(JoinNode.java:156)
>         at org.drools.reteoo.JoinNode.assertObject(JoinNode.java:148)
>         at
> org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59)
>         at
> org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:235)
>         at
> org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:240)
>         at
> org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:350)
>         at
> org.drools.common.NamedEntryPoint.insert(NamedEntryPoint.java:311)
>         at
> org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:903)
>         at
> org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:192)
>         at
> org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:186)
>         at
> express.Rule_initphone_aea184dfceb14326841c37daadabfdbc.defaultConsequence(Rule_initphone_aea184dfceb14326841c37daadabfdbc.java:8)
>         at
> express.Rule_initphone_aea184dfceb14326841c37daadabfdbcDefaultConsequenceInvokerGenerated.evaluate(Unknown
> Source)
>         at
> express.Rule_initphone_aea184dfceb14326841c37daadabfdbcDefaultConsequenceInvoker.evaluate(Unknown
> Source)
>         at
> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1287)
>         ... 7 more
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20130218/7d3397ae/attachment.html 


More information about the rules-users mailing list