<br> Yes, that is correct. If the underlying class interface changed, java will raise CCE. Rulebase must be recompiled in that case.<br><br> []s<br> Edson<br><br><div class="gmail_quote">2008/12/2 seemamani <span dir="ltr"><<a href="mailto:seemamani@gmail.com">seemamani@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Thanks Dean, we have removed the AOP implementation to check if that is the<br>
source of the problem.<br>
<br>
Edson, Is there any chance for a ClassCastException if the fact classes in<br>
the application were changed, but the fact model classes that are part of<br>
the compiled rule package were not updated to the most recent version? But<br>
then it would cause exceptions consistently, right? In our case, the<br>
exceptions are thrown occasionally only.<br>
<br>
Thanks,<br>
Seema<br>
<div><div></div><div class="Wj3C7c"><br>
<br>
Dean Turner wrote:<br>
><br>
> FYI: Spring AOP enhances objects via CGLIB when no interface is available.<br>
> If an interface is avaiable, it uses an jdk dynamic proxy.<br>
><br>
> -----Original Message-----<br>
> From: <a href="mailto:rules-users-bounces@lists.jboss.org">rules-users-bounces@lists.jboss.org</a><br>
> [mailto:<a href="mailto:rules-users-bounces@lists.jboss.org">rules-users-bounces@lists.jboss.org</a>] On Behalf Of seemamani<br>
> Sent: Wednesday, November 26, 2008 11:18 AM<br>
> To: <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
> Subject: Re: [rules-users] ClassCastException when firing rules<br>
><br>
><br>
> Edson,<br>
><br>
> We are not sure how the CGLIB proxy is getting created. We were under the<br>
> impression that it is the shadow fact proxy generated by Drools itself. I<br>
> would like to share a few more points about our application in case they<br>
> are<br>
> somehow related to this problem.<br>
><br>
> 1. We are using Spring AOP for intercepting method calls and passing the<br>
> facts, globals etc to a class that invoke Drools. Version of Spring is<br>
> 2.0.7<br>
> 2. We are using Hibernate 3.x/JPA for persistence. In fact the Inventory<br>
> POJO that is causing the ClassCastException is a JPA entity<br>
> 3. We have rules defined in multiple packages. The Inventory POJO is used<br>
> by<br>
> rules in all the packages. But the exception is occurring only for rules<br>
> in<br>
> a particular package. That too only occasionally.<br>
><br>
> Please let me know if any other information is required.<br>
><br>
> Thanks,<br>
> Seema<br>
><br>
><br>
> Edson Tirelli-3 wrote:<br>
>><br>
>> What are you guys doing with CGLIB? or is this WebSphere doing some<br>
>> sneaky thing behind the scenes? Or is it SpringAOP doing sneaky things?<br>
>><br>
>> Caused by:<br>
>> java.lang.ClassCastException: com.adesa.data.grounding.pojo.Inventory<br>
>> incompatible with<br>
>> com.adesa.data.grounding.pojo.Inventory$$EnhancerByCGLIB$$de81aab3<br>
>><br>
>> At compile time we determine that "inventory" is a<br>
>> com.adesa.data.grounding.pojo.Inventory. If at runtime what arrives into<br>
>> the<br>
>> expression is a<br>
>> com.adesa.data.grounding.pojo.Inventory$$EnhancerByCGLIB$$de81aab3,<br>
>> and it is not a proper subclass, you might get such problems.<br>
>><br>
>> Having said that, I will talk to Mike to check if this can be<br>
> prevented<br>
>> somehow, but I really don't know if it will be possible...<br>
>><br>
>> []s<br>
>> Edson<br>
>><br>
>><br>
>><br>
>> 2008/11/25 seemamani <<a href="mailto:seemamani@gmail.com">seemamani@gmail.com</a>><br>
>><br>
>>><br>
>>> hi,<br>
>>><br>
>>> We are using Drools 4.0.7 in a web application deployed in WebSphere<br>
> 6.1.<br>
>>> Occasionally, we have rule engine failure caused by<br>
>>> RuntimeDroolsException<br>
>>> (whose root cause is shown as ClassCastException) when firing rules.<br>
>>> Other<br>
>>> times, the rules are executing without errors. Here is the stack trace<br>
> of<br>
>>> the exception. What are the possible reasons?<br>
>>><br>
>>> Thanks,<br>
>>> Seema<br>
>>><br>
>>> org.drools.RuntimeDroolsException: Exception executing predicate eval(<br>
>>> inventory.leaseInformation != null )<br>
>>> at<br>
>>><br>
> org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:216<br>
> )<br>
>>> at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:137)<br>
>>> at<br>
>>><br>
>>><br>
> org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(Composi<br>
> teObjectSinkAdapter.java:318)<br>
>>> at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:145)<br>
>>> at<br>
>>><br>
>>><br>
> org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(Composi<br>
> teObjectSinkAdapter.java:318)<br>
>>> at<br>
>>> org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:162)<br>
>>> at org.drools.reteoo.Rete.assertObject(Rete.java:175)<br>
>>> at<br>
>>> org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)<br>
>>> at<br>
>>><br>
> org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:71<br>
> )<br>
>>> at<br>
>>><br>
>>><br>
> org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:<br>
> 911)<br>
>>> at<br>
>>><br>
>>><br>
> org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:<br>
> 883)<br>
>>> at<br>
>>><br>
>>><br>
> org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:<br>
> 684)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.framework.rules.process.drools.ManagedStatefulSession.i<br>
> nit(ManagedStatefulSession.java:87)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.framework.rules.process.drools.ManagedStatefulSession.f<br>
> ireAllRules(ManagedStatefulSession.java:100)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.framework.rules.process.drools.RuleEngineImpl.execute(R<br>
> uleEngineImpl.java:60)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.framework.rules.interceptor.RulesInterceptor.applyAnnot<br>
> edRules(RulesInterceptor.java:109)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.framework.rules.interceptor.RulesInterceptor.applyRules<br>
> (RulesInterceptor.java:80)<br>
>>> at sun.reflect.GeneratedMethodAccessor575.invoke(Unknown Source)<br>
>>> at<br>
>>><br>
>>><br>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm<br>
> pl.java:43)<br>
>>> at java.lang.reflect.Method.invoke(Method.java:618)<br>
>>> at<br>
>>><br>
>><br>
>>><br>
> org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWi<br>
> thGivenArgs(AbstractAspectJAdvice.java:597)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(A<br>
> bstractAspectJAdvice.java:583)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAd<br>
> vice.java:60)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Refle<br>
> ctiveMethodInvocation.java:171)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(Exp<br>
> oseInvocationInterceptor.java:89)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Refle<br>
> ctiveMethodInvocation.java:171)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor<br>
> .intercept(Cglib2AopProxy.java:629)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.rules.RuleHandler$$EnhancerByCGLIB$$3ab6eda.fireUpdateP<br>
> ricing(<generated>)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.auction.manager.SaleEventManagerImpl.updatePricing(Sale<br>
> EventManagerImpl.java:2599)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.auction.manager.SaleEventManagerImpl.cascadeAtEndOfAuct<br>
> ion(SaleEventManagerImpl.java:1993)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.auction.manager.SaleEventManagerImpl.cascadeAtEndOfGrou<br>
> ndingSaleEventForHyundai(SaleEventManagerImpl.java:1783)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.auction.manager.SaleEventManagerImpl.cascadeAtEndOfGrou<br>
> ndingSaleEvent(SaleEventManagerImpl.java:1180)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.auction.manager.SaleEventManagerImpl.cascadeAtEndOfGrou<br>
> ndingSaleEvent(SaleEventManagerImpl.java:1134)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.auction.service.AuctionServiceImpl.cascadeAtEndOfGround<br>
> ingSaleEvent(AuctionServiceImpl.java:766)<br>
>>> at sun.reflect.GeneratedMethodAccessor263.invoke(Unknown Source)<br>
>>> at<br>
>>><br>
>>><br>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm<br>
> pl.java:43)<br>
>>> at java.lang.reflect.Method.invoke(Method.java:618)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(Ao<br>
> pUtils.java:304)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoi<br>
> nt(ReflectiveMethodInvocation.java:182)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Refle<br>
> ctiveMethodInvocation.java:149)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(<br>
> TransactionInterceptor.java:106)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Refle<br>
> ctiveMethodInvocation.java:171)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.procee<br>
> d(MethodInvocationProceedingJoinPoint.java:77)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.framework.logging.LoggingInterceptor.profileLog(Logging<br>
> Interceptor.java:136)<br>
>>> at sun.reflect.GeneratedMethodAccessor74.invoke(Unknown Source)<br>
>>> at<br>
>>><br>
>>><br>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorIm<br>
> pl.java:43)<br>
>>> at java.lang.reflect.Method.invoke(Method.java:618)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWi<br>
> thGivenArgs(AbstractAspectJAdvice.java:597)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(A<br>
> bstractAspectJAdvice.java:583)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAd<br>
> vice.java:60)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Refle<br>
> ctiveMethodInvocation.java:171)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.adapter.AfterReturningAdviceInterceptor.<br>
> invoke(AfterReturningAdviceInterceptor.java:50)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Refle<br>
> ctiveMethodInvocation.java:171)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJA<br>
> fterThrowingAdvice.java:54)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Refle<br>
> ctiveMethodInvocation.java:171)<br>
>>> at<br>
>>><br>
>>><br>
> <a href="http://org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.in" target="_blank">org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.in</a><br>
> voke(MethodBeforeAdviceInterceptor.java:50)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Refle<br>
> ctiveMethodInvocation.java:171)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJA<br>
> fterThrowingAdvice.java:54)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Refle<br>
> ctiveMethodInvocation.java:171)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(Exp<br>
> oseInvocationInterceptor.java:89)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Refle<br>
> ctiveMethodInvocation.java:171)<br>
>>> at<br>
>>><br>
>>><br>
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopP<br>
> roxy.java:204)<br>
>>> at $Proxy58.cascadeAtEndOfGroundingSaleEvent(Unknown Source)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.pricing.ejb.PricingBean.updateMBPPrice(PricingBean.java<br>
> :112)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.pricing.ejb.EJSRemoteStatelessPricing_a0966b04.updateMB<br>
> PPrice(EJSRemoteStatelessPricing_a0966b04.java:183)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.pricing.ejb._EJSRemoteStatelessPricing_a0966b04_Tie.upd<br>
> ateMBPPrice(_EJSRemoteStatelessPricing_a0966b04_Tie.java:243)<br>
>>> at<br>
>>><br>
>>><br>
> com.adesa.business.pricing.ejb._EJSRemoteStatelessPricing_a0966b04_Tie._in<br>
> voke(_EJSRemoteStatelessPricing_a0966b04_Tie.java:108)<br>
>>> at<br>
>>><br>
>>><br>
> com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.jav<br>
> a:621)<br>
>>> at<br>
>>> com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:474)<br>
>>> at com.ibm.rmi.iiop.ORB.process(ORB.java:503)<br>
>>> at com.ibm.CORBA.iiop.ORB.process(ORB.java:1571)<br>
>>> at com.ibm.rmi.iiop.Connection.respondTo(Connection.java:2701)<br>
>>> at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2575)<br>
>>> at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:62)<br>
>>> at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:118)<br>
>>> at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)<br>
>>> Caused by:<br>
>>> java.lang.ClassCastException: com.adesa.data.grounding.pojo.Inventory<br>
>>> incompatible with<br>
>>> com.adesa.data.grounding.pojo.Inventory$$EnhancerByCGLIB$$de81aab3<br>
>>> at ASMAccessorImpl_11448003161226563261710.getValue(Unknown<br>
>>> Source)<br>
>>> at<br>
>>><br>
>>><br>
> org.mvel.ast.VariableDeepPropertyNode.getReducedValueAccelerated(VariableD<br>
> eepPropertyNode.java:22)<br>
>>> at<br>
>>><br>
>>><br>
> org.mvel.ast.PropertyASTNode.getReducedValueAccelerated(PropertyASTNode.ja<br>
> va:21)<br>
>>> at<br>
>>><br>
>>><br>
> org.mvel.ast.BinaryOperation.getReducedValueAccelerated(BinaryOperation.ja<br>
> va:21)<br>
>>> at org.mvel.MVELRuntime.execute(MVELRuntime.java:90)<br>
>>> at<br>
>>> org.mvel.CompiledExpression.getValue(CompiledExpression.java:111)<br>
>>> at org.mvel.MVEL.executeExpression(MVEL.java:235)<br>
>>> at<br>
>>><br>
>>><br>
> org.drools.base.mvel.MVELPredicateExpression.evaluate(MVELPredicateExpress<br>
> ion.java:45)<br>
>>> at<br>
>>><br>
> org.drools.rule.PredicateConstraint.isAllowed(PredicateConstraint.java:209<br>
> )<br>
>>> --<br>
>>> View this message in context:<br>
>>><br>
> <a href="http://www.nabble.com/ClassCastException-when-firing-rules-tp20694738p2069" target="_blank">http://www.nabble.com/ClassCastException-when-firing-rules-tp20694738p2069</a><br>
> 4738.html<br>
>>> Sent from the drools - user mailing list archive at Nabble.com.<br>
>>><br>
>>> _______________________________________________<br>
>>> rules-users mailing list<br>
>>> <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
>>> <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
>>><br>
>><br>
>><br>
>><br>
>> --<br>
>> Edson Tirelli<br>
>> JBoss Drools Core Development<br>
>> JBoss, a division of Red Hat @ <a href="http://www.jboss.com" target="_blank">www.jboss.com</a><br>
>><br>
>> _______________________________________________<br>
>> rules-users mailing list<br>
>> <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
>> <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
>><br>
>><br>
><br>
> --<br>
> View this message in context:<br>
> <a href="http://www.nabble.com/Occasional-ClassCastException-when-firing-rules-tp20" target="_blank">http://www.nabble.com/Occasional-ClassCastException-when-firing-rules-tp20</a><br>
> 694738p20705144.html<br>
> Sent from the drools - user mailing list archive at Nabble.com.<br>
><br>
> _______________________________________________<br>
> rules-users mailing list<br>
> <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
> <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
> _______________________________________________<br>
> rules-users mailing list<br>
> <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
> <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
><br>
><br>
<br>
--<br>
</div></div>View this message in context: <a href="http://www.nabble.com/Occasional-ClassCastException-when-firing-rules-tp20694738p20794410.html" target="_blank">http://www.nabble.com/Occasional-ClassCastException-when-firing-rules-tp20694738p20794410.html</a><br>
<div><div></div><div class="Wj3C7c">Sent from the drools - user mailing list archive at Nabble.com.<br>
<br>
_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br> Edson Tirelli<br> JBoss Drools Core Development<br> JBoss, a division of Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a><br>