[rules-users] ClassCastException when KnowledgeAgent loads declared type

lhorton LHorton at ABCLegal.com
Mon Jan 16 13:21:19 EST 2012


Code level:  5.2.0.Final

I have a DRL file that includes a declared type:

package com.abclegal.rules.servicerequirements
declare TransgressionMetaData
	attempt : ServiceAttempt
	requirement : Requirement
end

The package loads the first time and its rules run without error.  If I make
a change to the file and hot-deploy it (copy it to the server), the
ResourceChangeScanner picks up the file and KnowledgeAgent loads it, but
when any rule from that package subsequently fires, I get a
ClassCastException on the declared type:

com.abclegal.rules.servicerequirements.TransgressionMetaData cannot be cast
to com.abclegal.rules.servicerequirements.TransgressionMetaData

it appears the KnowledgeAgent is not replacing the existing (in working
memory) definition of the declared type, but instead is creating a new one
with a different hash code.

looks like a bug?

Full stack trace:
Caused by: RulesConsequenceException executing consequence for rule
"PHOTO_WHEN_SERVED: Photo must be taken if served." in
com.abclegal.rules.servicerequirements
[Error: drools.insert(new TransgressionMetaData($attempt,$req)):
com.abclegal.rules.servicerequirements.TransgressionMetaData cannot be cast
to com.abclegal.rules.servicerequirements.TransgressionMetaData]
[Near : {... @Modify with($attempt){ ....}]
             ^
[Line: 1, Column: 1]
java.lang.ClassCastException:
com.abclegal.rules.servicerequirements.TransgressionMetaData cannot be cast
to com.abclegal.rules.servicerequirements.TransgressionMetaData
Rules working memory:
Fact ServiceAttempt id: 17
	at
com.abclegal.rules.utility.RulesConsequenceExceptionHandler.handleException(RulesConsequenceExceptionHandler.java:24)
	at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:912)
	at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:845)
	at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1056)
	at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:733)
	at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:699)
	at
org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)
	at
org.drools.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:305)
	at
com.abclegal.rules.server.RulesServiceImpl.execute(RulesServiceImpl.java:378)
	... 44 more
Caused by: [Error: drools.insert(new TransgressionMetaData($attempt,$req)):
com.abclegal.rules.servicerequirements.TransgressionMetaData cannot be cast
to com.abclegal.rules.servicerequirements.TransgressionMetaData]
[Near : {... @Modify with($attempt){ ....}]
             ^
[Line: 1, Column: 1]
	at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:409)
	at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:140)
	at
org.mvel2.optimizers.dynamic.DynamicOptimizer.optimizeAccessor(DynamicOptimizer.java:67)
	at org.mvel2.ast.ASTNode.optimize(ASTNode.java:154)
	at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:110)
	at org.mvel2.MVELRuntime.execute(MVELRuntime.java:86)
	at
org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:122)
	at
org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:115)
	at org.mvel2.MVEL.executeExpression(MVEL.java:928)
	at org.drools.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:105)
	at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:906)
	... 51 more
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:1066)
	at
org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:338)
	... 61 more


--
View this message in context: http://drools.46999.n3.nabble.com/ClassCastException-when-KnowledgeAgent-loads-declared-type-tp3664044p3664044.html
Sent from the Drools: User forum mailing list archive at Nabble.com.



More information about the rules-users mailing list