[rules-users] Error in MVEL execution (optimization?)

Wolfgang Laun wolfgang.laun at gmail.com
Thu Jan 5 09:34:23 EST 2012


Using Drools 5.3.0.

I find that my "java" version produces three calls (one true, two false).
This is my dialect "java" version of the first rule:

dialect "java"
rule "First Rule"
   when
       $tf : TestFact(TestUtility.utilMethod($tf.getS(), "Value1") == true
&&
                     i > 0
        )
   then
       System.out.println("First Rule Fires");
end

The MVEL version executes six (6) calls: two returning true, and four
returning false.

-W*
*

On 5 January 2012 14:55, ronalbury <ronalbury at gmail.com> wrote:

> Here is a very simple test.  Note that utilMethod is called twice for the
> first rule, but is never called for the other two rules.  If you convert to
> Java dialect then things execute as expected.
>
>
> TestRules.drl:
> #created on: Jan 5, 2012
> package com.sample
>
> import com.sample.TestUtility;
>
> rule "First Rule"
>    when
>        $tf : TestFact(TestUtility.utilMethod(s, "Value1") == true
>                  && i > 0
>        )
>    then
>        System.out.println("First Rule Fires");
> end
>
> rule "Second Rule"
>    when
>        $tf : TestFact(TestUtility.utilMethod(s, "Value2") == true
>                  && i > 0
>        )
>    then
>        System.out.println("Second Rule Fires");
> end
>
> rule "Third Rule"
>    when
>        $tf : TestFact(TestUtility.utilMethod(s, "Value3") == true
>                  && i > 0
>        )
>    then
>        System.out.println("Third Rule Fires");
> end
>
>
>
> TestUtility.java:
> package com.sample;
>
> public class TestUtility {
>    public static Boolean utilMethod(String s1, String s2) {
>        Boolean result = null;
>
>        if (s1 != null) {
>            result = s1.equals(s2);
>        }
>
>        System.out.println("in utilMethod >" + s1 + "<  >" + s2 + "< returns
> " + result);
>        return result;
>    }
> }
>
> TestDriver.java:
>    public static final void main(String[] args) {
>        try {
>            // load up the knowledge base
>            KnowledgeBase kbase = readKnowledgeBase();
>            StatefulKnowledgeSession ksession =
> kbase.newStatefulKnowledgeSession();
>
>            // setup the debug listeners
>            ksession.addEventListener(new DebugAgendaEventListener());
>            ksession.addEventListener(new
> DebugWorkingMemoryEventListener());
>            KnowledgeRuntimeLogger logger =
> KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
>
>            // go !
>            TestFact fact = new TestFact();
>            fact.setS("asdf");
>            fact.setI(10);
>            ksession.insert(fact);
>            ksession.fireAllRules();
>            logger.close();
>        }
>        catch (Throwable t) {
>            t.printStackTrace();
>        }
>    }
>
>
> Output:
> in utilMethod >asdf<  >Value1< returns false
> in utilMethod >asdf<  >Value1< returns false
> ==>[ObjectInsertedEventImpl: getFactHandle()=[fact
> 0:1:31556811:31556811:1:DEFAULT:com.sample.TestFact at 1e184cb],
> getObject()=com.sample.TestFact at 1e184cb,
> getKnowledgeRuntime()=org.drools.impl.StatefulKnowledgeSessionImpl at 70610a,
> getPropagationContext()=PropagationContextImpl [activeActivations=0,
> dormantActivations=0, entryPoint=EntryPoint::DEFAULT, factHandle=[fact
> 0:1:31556811:31556811:1:DEFAULT:com.sample.TestFact at 1e184cb],
> leftTuple=null, originOffset=-1, propagationNumber=3, rule=null, type=0]]
>
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/Error-in-MVEL-execution-optimization-tp3633440p3634884.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20120105/3e6b4000/attachment.html 


More information about the rules-users mailing list