[rules-users] unexpected/spurious ClassCastException

Davide Sottara dsotty at gmail.com
Mon Jul 7 17:34:10 EDT 2014


What is the relationship (extends/implements) between the classes/interfaces
in your model - ContextFoodItem, FoodItem, ContextDiner, etc.. ?
Could you also please specify the version of Drools you are using?
Thanks!
Davide

On 07/07/2014 03:04 PM, Borris wrote:
> I am getting an unexpected cast exception. The backtrace looks like
>
> Exception in thread "main" java.lang.ClassCastException: 
> com.tastiereasier.rulez.ContextFoodItem cannot be cast to 
> com.tastiereasier.domain.FoodItem
>      at 
> ConditionEvaluatorb792d1e4169f4ac98945e49e1412d793.evaluate(Unknown Source)
>      at 
> org.drools.core.rule.constraint.MvelConstraint.evaluate(MvelConstraint.java:216)
>      at 
> org.drools.core.rule.constraint.MvelConstraint.isAllowedCachedLeft(MvelConstraint.java:185)
>      at 
> org.drools.core.common.SingleNonIndexSkipBetaConstraints.isAllowedCachedLeft(SingleNonIndexSkipBetaConstraints.java:141)
>      at 
> org.drools.core.phreak.PhreakJoinNode.doLeftInserts(PhreakJoinNode.java:98)
>      at org.drools.core.phreak.PhreakJoinNode.doNode(PhreakJoinNode.java:60)
>      at 
> org.drools.core.phreak.RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:547)
>      at 
> org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:533)
>      at 
> org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:334)
>      at 
> org.drools.core.phreak.RuleNetworkEvaluator.evalStackEntry(RuleNetworkEvaluator.java:224)
>      at 
> org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:166)
>      at 
> org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:116)
>      at 
> org.drools.core.phreak.RuleExecutor.reEvaluateNetwork(RuleExecutor.java:193)
>      at 
> org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:68)
>      at 
> org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:928)
>      at 
> org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1193)
>      at 
> org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1202)
>      at 
> org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1175)
>      at com.tastiereasier.rulez.Rulez.insertAndFire(Rulez.java:168)
>      at com.tastiereasier.rulez.Rulez.addDinerToContext(Rulez.java:310)
>      at com.tastiereasier.rulez.Rulez.<init>(Rulez.java:101)
>      at com.tastiereasier.rulez.Rulez.main(Rulez.java:44)
>
> The rules that are triggering this are:
>
> rule contextDinerDislike
>      enabled true
>      when
>          ContextDiner( $diner; )
>          DatumPreference
>          (
>              datumPreferenceType == DatumPreference.Type.PREFERENCE,
>              belief.factor < 0.0,
>              $datum: datum
>          )
>          from $diner.getDatumPreferences()
>      then
>          insert( new ContextFoodItem( (FoodItem) $datum, true ) );
> end
>
> rule spotNewContextDinerLike
>      enabled true
>      when
>          ContextDiner( $diner; )
>          DatumPreference
>          (
>              datumPreferenceType == DatumPreference.Type.PREFERENCE,
>              belief.factor > 0.0,
>              $datum: datum
>          )
>          from $diner.getDatumPreferences()
>      then
>          insert( new ContextFoodItem( (FoodItem) $datum, false ) );
> end
>
> If I disable either rule, then the other proceeds fine and no cast 
> exception happens.
>
> I can't see why the cast should ever be asked for - it doesn't make sense.
>
> If I changed the boolean parameter in the new in the insert - so both 
> are either true or both
> are either false, there are no cast exceptions (there must be a clue here).
>
> If I put a debug after the insertion, the backtrace actually happens 
> after return from the
> insert() method - implying it's something on the agenda?
>
> I tried using the Audit stuff to see if it gave any clues - but I've 
> never used that before
> and simply got a heap exhaustion from Eclipse after 1/2 hour trying to 
> ingest something like 200
> meg of trace data - I've got a lot of data being initialised into the 
> workspace before these rules
> get a chance to do anything.
>
> It's feeling remarkably like a bug to me, but I don't know how to 
> interpret the backtrace usefully,
> so it's possible I've got something messed up elsewhere - although I've 
> disabled massive amounts
> of rules that I can.
>
> I grabbed a snapshot last night and it didn't change anything. (I was on 
> a snapshot from early June to fix being able to have Drools editor 
> reference my external jars.)
>
> Does this look like a bug or user error? It's going to take some effort 
> to try and extract a test case
> so I really don't want to spend the effort on that unless it looks the 
> only way.
>
> Sage observations most appreciated.
>
> Borris
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



More information about the rules-users mailing list