[rules-users] Unable to resolve token on function call with mvel dialect

Edson Tirelli tirelli at post.com
Tue Dec 16 09:43:32 EST 2008


   Nope, MVEL 2 is not backward compatible with the 1.3.x release.

   I am talking with Mike about this.

   []s
   Edson

2008/12/16 Olivier THIERRY <olivier.thierry at gmail.com>

> Sorry, I had not seen there was later version than 1.3.9.
> Anyway, I tried with 1.3.12 and had the same problem.
> >From 1.3.13, it looks like there is a problem on mvel initialization
> since I have this stack trace :
>
> java.lang.NoSuchMethodError: org.mvel.MVEL.setThreadSafe(Z)V
>        at
> org.drools.rule.builder.dialect.mvel.MVELDialect.init(MVELDialect.java:144)
>        at
> org.drools.compiler.DialectRegistry.initAll(DialectRegistry.java:49)
>        at
> org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:146)
>        at org.drools.compiler.PackageBuilder.<init>(PackageBuilder.java:86)
>        at
> t4.test.drools.TestRuleBase.executeRuleWithDsl(TestRuleBase.java:105)
>        at t4.test.drools.Test1.testDslMvel(Test1.java:39)
>
>
>
> 2008/12/16 Olivier THIERRY <olivier.thierry at gmail.com>:
> > I use mvel 1.3.9, so the latest 1.3.x version.
> > Is there a way to upgrade to mvel 2.x with drools 4.0.7 ? Or will I
> > have to wait for drools 5.0.0 ?
> >
> > 2008/12/15 Edson Tirelli <tirelli at post.com>:
> >>
> >>    BTW, what version of MVEL are you using?
> >>
> >> 2008/12/15 Olivier THIERRY <olivier.thierry at gmail.com>
> >>>
> >>> Well ... I found something very strange with Drools and mvel dialect
> >>> ... It looks like Drools doesn't like points in function parameters !
> >>>
> >>> I made this very simple test with a log function and the easier rule
> >>> you can have :
> >>>
> >>> function void log (String message) {
> >>>        System.out.println(message);
> >>> }
> >>>
> >>> rule "test"
> >>>        no-loop
> >>>        when
> >>>                eval(true)
> >>>        then
> >>>                log("hello world")
> >>> end
> >>>
> >>> log("hello world") works ok
> >>> log("hello.world") (note the point) fails with this stack trace :
> >>>
> >>> org.drools.spi.ConsequenceException:
> >>> org.mvel.UnresolveablePropertyException: unable to resolve token:
> >>> log("hello.world")
> >>>        at
> >>>
> org.drools.base.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:13)
> >>>        at
> >>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:558)
> >>>        at
> >>> org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:518)
> >>>        at
> >>>
> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:475)
> >>>        at
> >>>
> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:439)
> >>>        at t4.test.drools.TestRuleBase.executeRule(TestRuleBase.java:44)
> >>>        at t4.test.drools.Test1.testDebug(Test1.java:57)
> >>> Caused by: org.mvel.UnresolveablePropertyException: unable to resolve
> >>> token: log("hello.world")
> >>>        at
> >>>
> org.mvel.ast.PropertyASTNode.initializePropertyNode(PropertyASTNode.java:129)
> >>>        at
> >>>
> org.mvel.ast.PropertyASTNode.getReducedValueAccelerated(PropertyASTNode.java:24)
> >>>        at org.mvel.MVELRuntime.execute(MVELRuntime.java:90)
> >>>        at
> >>> org.mvel.CompiledExpression.getValue(CompiledExpression.java:111)
> >>>        at org.mvel.MVEL.executeExpression(MVEL.java:235)
> >>>        at
> >>> org.drools.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:48)
> >>>        at
> >>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:554)
> >>>        ... 34 more
> >>>
> >>> It looks like there is a problem with point character, doesn't it ? Is
> >>> it a known problem ?
> >>>
> >>> Regards,
> >>>
> >>> Olivier
> >>>
> >>>
> >>> 2008/12/15 Olivier THIERRY <olivier.thierry at gmail.com>:
> >>> > Thanks Edson. Here it is :
> >>> >
> >>> > rule "CALCUL_RELICAT_CP"
> >>> >        salience 8
> >>> >        no-loop
> >>> >        when
> >>> >                not $RELICAT_CP : VOCounter (code=="RELICAT_CP")
> >>> >                $startDate : RuleDate(name=="startDate")
> >>> >                $endDate : RuleDate(name=="endDate")
> >>> >                $SOLDE_CP_CUM : VOCounter ( code=="SOLDE_CP_CUM",
> >>> > startDate.year == ($startDate.year - 1) )
> >>> >        then
> >>> >                VOCounter $relicat =
> >>> > createCounter(drools,"RELICAT_CP",$SOLDE_CP_CUM.value);
> >>> >                insert($relicat);
> >>> >
> >>> >
>  insert(createCounter(drools,"SOLDE_RELICAT_CP",$SOLDE_CP_CUM.value));
> >>> > end
> >>> >
> >>> > I thought about trying with a newer version of mvel, but it doesn't
> >>> > look so easy to upgrade it :(
> >>> >
> >>> > 2008/12/15 Edson Tirelli <tirelli at post.com>:
> >>> >>
> >>> >>      Can you plz show us the DRL instead of the DSLR for your rule?
> use
> >>> >> the
> >>> >> DRLViewer tab for that...
> >>> >>
> >>> >> 2008/12/15 Olivier THIERRY <olivier.thierry at gmail.com>
> >>> >>>
> >>> >>> Hi,
> >>> >>>
> >>> >>> I use drools 4.0.7 and I encounter a problem calling a function
> from a
> >>> >>> rule written for mvel dialect.
> >>> >>>
> >>> >>> The function I need to call has this signature :
> >>> >>>
> >>> >>> function VOCounter createCounter(org.drools.spi.KnowledgeHelper
> >>> >>> drools, String code, Number number)
> >>> >>>
> >>> >>> When I call this function, I want to assign result to a variable,
> for
> >>> >>> example to insert it to working memory later, or just to use it in
> >>> >>> another function call.
> >>> >>> So I wrote something like that (I am writing a DSL so part of the
> code
> >>> >>> is
> >>> >>> DSL ):
> >>> >>>
> >>> >>> rule "CALCUL_RELICAT_CP"
> >>> >>>        salience 8
> >>> >>>        no-loop
> >>> >>>        when
> >>> >>>                not There is a counter called "RELICAT_CP"
> >>> >>>                There is a date called "startDate"
> >>> >>>                There is a date called "endDate"
> >>> >>>                There is a counter called "SOLDE_CP_CUM" with
> >>> >>>                        - start date is last year
> >>> >>>        then
> >>> >>> >               VOCounter $relicat =
> >>> >>> > createCounter(drools,"RELICAT_CP",$SOLDE_CP_CUM.value);
> >>> >>> >               insert($relicat);
> >>> >>>                Copy counter $SOLDE_CP_CUM to SOLDE_RELICAT_CP
> >>> >>> end
> >>> >>>
> >>> >>> But I have the following stack trace :
> >>> >>>
> >>> >>> org.drools.spi.ConsequenceException:
> >>> >>> org.mvel.UnresolveablePropertyException: unable to resolve token:
> >>> >>> createCounter(drools,"RELICAT_CP",$SOLDE_CP_CUM.value)
> >>> >>>        at
> >>> >>>
> >>> >>>
> org.drools.base.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:13)
> >>> >>>        at
> >>> >>>
> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:558)
> >>> >>>        at
> >>> >>>
> org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:518)
> >>> >>>        at
> >>> >>>
> >>> >>>
> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:475)
> >>> >>>        at
> >>> >>>
> >>> >>>
> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:439)
> >>> >>>        at
> >>> >>>
> >>> >>>
> fr.horoquartz.t4.test.drools.TestRuleBase.executeRuleWithDsl(TestRuleBase.java:120)
> >>> >>>        at fr.horoquartz.t4.test.drools.Test1.testDsl(Test1.java:39)
> >>> >>> Caused by: org.mvel.UnresolveablePropertyException: unable to
> resolve
> >>> >>> token: createCounter(drools,"RELICAT_CP",$SOLDE_CP_CUM.value)
> >>> >>>        at
> >>> >>>
> >>> >>>
> org.mvel.ast.PropertyASTNode.initializePropertyNode(PropertyASTNode.java:129)
> >>> >>>        at
> >>> >>>
> >>> >>>
> org.mvel.ast.PropertyASTNode.getReducedValueAccelerated(PropertyASTNode.java:24)
> >>> >>>        at
> >>> >>> org.mvel.ExecutableAccessor.getValue(ExecutableAccessor.java:45)
> >>> >>>        at
> >>> >>>
> >>> >>>
> org.mvel.ast.TypedVarNode.getReducedValueAccelerated(TypedVarNode.java:43)
> >>> >>>        at org.mvel.MVELRuntime.execute(MVELRuntime.java:90)
> >>> >>>        at
> >>> >>> org.mvel.CompiledExpression.getValue(CompiledExpression.java:111)
> >>> >>>        at org.mvel.MVEL.executeExpression(MVEL.java:235)
> >>> >>>        at
> >>> >>>
> org.drools.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:48)
> >>> >>>        at
> >>> >>>
> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:554)
> >>> >>>        ... 34 more
> >>> >>>
> >>> >>> What is strange is that it works if I don't assign function call
> >>> >>> result to a variable. For example the following works  :
> >>> >>>
> >>> >>> insert (createCounter(drools,"RELICAT_CP",$SOLDE_CP_CUM.value));
> >>> >>>
> >>> >>> It also works if I assign $SOLDE_CP_CUM.value to a temporary
> variable
> >>> >>> and use it for function call :
> >>> >>>
> >>> >>> Number $val = $SOLDE_CP_CUM.value;
> >>> >>> VOCounter $relicat = createCounter(drools,"RELICAT_CP",$val);
> >>> >>> insert($relicat);
> >>> >>>
> >>> >>> I had not this problem using java dialect. I understand nothing in
> >>> >>> what happens ... Anyone has an idea what the problem is ?
> >>> >>>
> >>> >>> Thanks in advance,
> >>> >>>
> >>> >>> Olivier
> >>> >>> _______________________________________________
> >>> >>> rules-users mailing list
> >>> >>> rules-users at lists.jboss.org
> >>> >>> https://lists.jboss.org/mailman/listinfo/rules-users
> >>> >>
> >>> >>
> >>> >>
> >>> >> --
> >>> >>  Edson Tirelli
> >>> >>  JBoss Drools Core Development
> >>> >>  JBoss, a division of Red Hat @ www.jboss.com
> >>> >>
> >>> >> _______________________________________________
> >>> >> rules-users mailing list
> >>> >> rules-users at lists.jboss.org
> >>> >> https://lists.jboss.org/mailman/listinfo/rules-users
> >>> >>
> >>> >>
> >>> >
> >>> >
> >>> >
> >>> > --
> >>> > Seules 2 choses sont infinies : l'univers et la bêtise humaine ; et
> >>> > encore pour l'univers, je ne suis pas sûr … (Einstein)
> >>> >
> >>>
> >>>
> >>>
> >>> --
> >>> Seules 2 choses sont infinies : l'univers et la bêtise humaine ; et
> >>> encore pour l'univers, je ne suis pas sûr … (Einstein)
> >>>
> >>> _______________________________________________
> >>> rules-users mailing list
> >>> rules-users at lists.jboss.org
> >>> https://lists.jboss.org/mailman/listinfo/rules-users
> >>
> >>
> >>
> >> --
> >>  Edson Tirelli
> >>  JBoss Drools Core Development
> >>  JBoss, a division of Red Hat @ www.jboss.com
> >>
> >> _______________________________________________
> >> rules-users mailing list
> >> rules-users at lists.jboss.org
> >> https://lists.jboss.org/mailman/listinfo/rules-users
> >>
> >>
> >
> >
> >
> > --
> > Seules 2 choses sont infinies : l'univers et la bêtise humaine ; et
> > encore pour l'univers, je ne suis pas sûr … (Einstein)
> >
>
>
>
> --
> Seules 2 choses sont infinies : l'univers et la bêtise humaine ; et
> encore pour l'univers, je ne suis pas sûr … (Einstein)
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



-- 
 Edson Tirelli
 JBoss Drools Core Development
 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/20081216/a13935fe/attachment.html 


More information about the rules-users mailing list