[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