[rules-users] Sporadic error running drools

Edson Tirelli tirelli at post.com
Mon Jun 9 09:24:31 EDT 2008


   Are you using Drools 4.0.7 with MVEL 1.3.1?

   If yes, can you please open a jira for this error stating if your program
is doing multi-thread compilation/execution, paste the information in your
e-mail bellow, and if possible add a test case to reproduce, even if the
error is intermittent?

   Thank  you
       Edson


2008/6/9 Augusto Rodriguez <augusto.rodriguez at globant.com>:

>  Dear All,
>
> We're using Drools in our project and we've been hitting a sporadic error
> when we insert Objects in a stateful session. Unfortunately we haven't been
> able to reproduce it in a constant way. We tried quite a lot of things but
> we haven't been able to track it to the core, but we found a way to "avoid"
> it, but we would love to know why this error is being triggered.
>
> >From time to time we get the following stack trace and usually after this
> the rulebase gets broken (all the stateful sessions we generate with it get
> unusable) and we can't run anything else in it (we have to restart the app
> in order to create a new rule base object).
>
> org.mvel.CompileException: cannot invoke method
>     at
> org.mvel.optimizers.impl.refl.MethodAccessor.getValue(MethodAccessor.java:68)
>     at
> org.mvel.optimizers.impl.refl.VariableAccessor.getValue(VariableAccessor.java:39)
>     at
> org.mvel.ast.VariableDeepPropertyNode.getReducedValueAccelerated(VariableDeepPropertyNode.java:22)
>     at
> org.mvel.ast.PropertyASTNode.getReducedValueAccelerated(PropertyASTNode.java:21)
>     at org.mvel.MVELRuntime.execute(MVELRuntime.java:88)
>     at org.mvel.CompiledExpression.getValue(CompiledExpression.java:111)
>     at org.mvel.MVEL.executeExpression(MVEL.java:252)
>     at
> org.drools.base.dataproviders.MVELDataProvider.getResults(MVELDataProvider.java:45)
>     at org.drools.reteoo.FromNode.assertTuple(FromNode.java:64)
>     at
> org.drools.reteoo.SingleTupleSinkAdapter.createAndPropagateAssertTuple(SingleTupleSinkAdapter.java:55)
>     at
> org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:116)
>     at
> org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:22)
>     at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:140)
>     at
> org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:318)
>     at
> org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:153)
>     at org.drools.reteoo.Rete.assertObject(Rete.java:175)
>     at
> org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)
>     at
> org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:71)
>     at
> org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:909)
>     at
> org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:881)
>     at
> org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:682)
>     at
> uk.co.vodco.sherbet.ccp.rules.availability.AvailabilityRulesEngineImpl.addProgramme(AvailabilityRulesEngineImpl.java:27)
> [removed a few lines]
> Caused by: java.lang.IllegalArgumentException:
> java.lang.ClassCastException at 1366d44
>     at sun.reflect.GeneratedMethodAccessor194.invoke(Unknown Source)
>     at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>     at java.lang.reflect.Method.invoke(Method.java:585)
>     at
> org.mvel.optimizers.impl.refl.MethodAccessor.getValue(MethodAccessor.java:64)
>     ... 69 common frames omitted
>
> We found that adding a line to a few rules like the following one removed
> the error:
>
> # given the version, add the programme if it does not exist
> *rule* "insertion of programme given a version"
> *ruleflow-group* "source-defaults"
> *    when*
>         $v: ProgrammeVersion()
>         $p: Programme() *from* $v.getProgramme()
> *        not* Programme(*this* == $p)
> *    then
>         insert* ($p);
> *        update* ($v); *<-- Added Line*
>         LoggerFactory.getLogger("factinsertion.drl").info("Entered:
> insertion of programme given version");
> *end*
> **   **
>
> Does anyone have an idea of what can be causing this error? We suppose it's
> related to the *from* clause in the condition. Because we're taking the
> object we're inserting in the working memory ($p) from the object $v, so in
> the end, for some reason, we also need to update $v.
>
>
> Thanks in advance!
> Augusto
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
Edson Tirelli
JBoss Drools Core Development
Office: +55 11 3529-6000
Mobile: +55 11 9287-5646
JBoss, a division of Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20080609/e282c052/attachment.html 


More information about the rules-users mailing list