Hi Wolfgang,<br><br>Just seen the JIRA Issue it seems test1.drl got some copy-paste problems , because both rules are present :D.<br>However, thanks for creating the issue !<br><br>Regards,<br>Manuel.<br><br><br><br><div class="gmail_quote">
2009/7/13 Wolfgang Laun <span dir="ltr">&lt;<a href="mailto:wolfgang.laun@gmail.com">wolfgang.laun@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<a href="https://jira.jboss.org/jira/browse/JBRULES-2206" target="_blank">https://jira.jboss.org/jira/browse/JBRULES-2206</a> created.<br>
<br>
Thanks for the code!<br>
<div><div></div><div class="h5">-W<br>
<br>
On 7/13/09, Chivotario Martin &lt;<a href="mailto:chivotario@gmail.com">chivotario@gmail.com</a>&gt; wrote:<br>
&gt; Hi Wolfgang,<br>
&gt;<br>
&gt; I do not know if i can use the issue tracker to post this as an issue, as i<br>
&gt; don&#39;t know if i&#39;m allowed to do so, and also if this is officially, really a<br>
&gt; bug or the expected behaviour :) .<br>
&gt;<br>
&gt; However i left a complete piece of code showing the behaviour i&#39;m getting :<br>
&gt;<br>
&gt; RuleTester.java<br>
&gt;<br>
&gt; package org.drools.test;<br>
&gt;<br>
&gt; import org.drools.KnowledgeBase;<br>
&gt; import org.drools.KnowledgeBaseConfiguration;<br>
&gt; import org.drools.KnowledgeBaseFactory;<br>
&gt; import org.drools.RuleBaseConfiguration;<br>
&gt; import org.drools.builder.KnowledgeBuilder;<br>
&gt; import org.drools.builder.KnowledgeBuilderFactory;<br>
&gt; import org.drools.builder.ResourceType;<br>
&gt; import org.drools.io.ResourceFactory;<br>
&gt; import org.drools.runtime.StatefulKnowledgeSession;<br>
&gt;<br>
&gt; public class RuleTester {<br>
&gt;<br>
&gt;     private static final int MAX_EVENTS = 5;<br>
&gt;<br>
&gt;     public class Foo { }<br>
&gt;<br>
&gt;     public void test() {<br>
&gt;<br>
&gt;         KnowledgeBaseConfiguration config =<br>
&gt; KnowledgeBaseFactory.newKnowledgeBaseConfiguration();<br>
&gt;<br>
&gt; ((RuleBaseConfiguration)config).setRuleBaseUpdateHandler(<br>
&gt; null );<br>
&gt;         KnowledgeBase kbase =<br>
&gt; KnowledgeBaseFactory.newKnowledgeBase(config);<br>
&gt;<br>
&gt;         StatefulKnowledgeSession session =<br>
&gt; kbase.newStatefulKnowledgeSession();<br>
&gt;<br>
&gt;         for (int i=0; i&lt;MAX_EVENTS; i++) {<br>
&gt;             session.insert(new Foo());<br>
&gt;         }<br>
&gt;<br>
&gt;         for (int i=1; i&lt;3; i++) {<br>
&gt;             KnowledgeBuilder kbuilder =<br>
&gt; KnowledgeBuilderFactory.newKnowledgeBuilder();<br>
&gt;             kbuilder.add(<br>
&gt; ResourceFactory.newClassPathResource( &quot;test&quot;+i+&quot;.drl&quot; ),<br>
&gt; ResourceType.DRL);<br>
&gt;<br>
&gt;             if( kbuilder.hasErrors() ) {<br>
&gt;                 System.out.println( kbuilder.getErrors() );<br>
&gt;                 return;<br>
&gt;             }<br>
&gt;<br>
&gt;             kbase.addKnowledgePackages(<br>
&gt; kbuilder.getKnowledgePackages() );<br>
&gt;<br>
&gt;             int fireCount = session.fireAllRules();<br>
&gt;<br>
&gt;             System.out.println(&quot;Test&quot;+i+&quot;.drl , number of<br>
&gt; rules fired = &quot;+fireCount);<br>
&gt;<br>
&gt;         }<br>
&gt;<br>
&gt;         session.dispose();<br>
&gt;<br>
&gt;     }<br>
&gt;<br>
&gt;     public static void main(String[] args) {<br>
&gt;         RuleTester tester = new RuleTester();<br>
&gt;         tester.test();<br>
&gt;     }<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt;<br>
&gt; test1.drl<br>
&gt;<br>
&gt; import org.drools.test.RuleTester.Foo;<br>
&gt;<br>
&gt; rule &quot;notNotRule&quot;<br>
&gt;     when<br>
&gt;         exists ( Foo() );<br>
&gt;     then<br>
&gt;         System.out.println(&quot;Rule fired...&quot;);<br>
&gt; end<br>
&gt;<br>
&gt; test2.drl<br>
&gt;<br>
&gt; import org.drools.test.RuleTester.Foo;<br>
&gt;<br>
&gt; rule &quot;notNotRule&quot;<br>
&gt;     when<br>
&gt;         not ( not ( Foo() ) );<br>
&gt;     then<br>
&gt;         System.out.println(&quot;Rule fired...&quot;);<br>
&gt; end<br>
&gt;<br>
&gt;<br>
&gt; Using Drools 5.0.1-Final , the expected output would be :<br>
&gt;<br>
&gt; &gt; Test1.drl , number of rules fired = 0<br>
&gt; &gt; Rule fired...<br>
&gt; &gt; Test2.drl , number of rules fired = 1<br>
&gt;<br>
&gt; If someone allows me to open this a a JIRA i would try to understand how to<br>
&gt; use it :D and would do so.<br>
&gt;<br>
&gt; Regards,<br>
&gt; Manuel.<br>
&gt;<br>
&gt;<br>
&gt; 2009/7/13 Wolfgang Laun &lt;<a href="mailto:wolfgang.laun@gmail.com">wolfgang.laun@gmail.com</a>&gt;<br>
&gt;<br>
&gt; &gt; Quite right, since not(not(Foo())) is equivalent to exists(Foo()).<br>
&gt; &gt;<br>
&gt; &gt; Martin, would you please submit a JIRA?<br>
&gt; &gt;<br>
&gt; &gt; -W<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; On 7/13/09, Chivotario Martin &lt;<a href="mailto:chivotario@gmail.com">chivotario@gmail.com</a>&gt; wrote:<br>
&gt; &gt; &gt; Hi Visu,<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; My understanding (also tested) is that activations are created no matter<br>
&gt; the<br>
&gt; &gt; &gt; knowledge base has the rule packages loaded<br>
&gt; &gt; &gt; before or after the working memory is filled with facts, but the<br>
&gt; execution<br>
&gt; &gt; &gt; of the rules happens automatically if the working memory is filled in<br>
&gt; &gt; &gt; advance.Setting the RuleBaseUpdateHandler to null, prevents the<br>
&gt; execution of<br>
&gt; &gt; &gt; the rules but keeps activations to be created when adding a rule to the<br>
&gt; &gt; &gt; kbase.<br>
&gt; &gt; &gt; In this case, it seems the exists CE only creates activations if the<br>
&gt; rules<br>
&gt; &gt; &gt; are loaded before the working memory is populated.<br>
&gt; &gt; &gt; But this doesn&#39;t happen if i change the statement :<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;   exists ( Foo() ) --&gt; not ( not ( Foo() ) )<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; In this case, activations are created no matter whether the kbase is<br>
&gt; empty<br>
&gt; &gt; &gt; or not before populating the WM.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; 2009/7/13 Viswanathan Nageswaran &lt;<a href="mailto:visu.nageswaran@in.ibm.com">visu.nageswaran@in.ibm.com</a>&gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Chivotario,<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;From what I understand, the activation of rules happen as facts are<br>
&gt; &gt; &gt; &gt; inserted into the working memory; hence it is important for the<br>
&gt; session to<br>
&gt; &gt; &gt; &gt; be begun against a knowledge base that has the rule packages loaded<br>
&gt; before<br>
&gt; &gt; &gt; &gt; the facts are inserted.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; -Visu<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;             Chivotario Martin<br>
&gt; &gt; &gt; &gt;             &lt;chivotario@gmail<br>
&gt; &gt; &gt; &gt;             .com&gt;<br>
&gt; To<br>
&gt; &gt; &gt; &gt;             Sent by:                  <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
&gt; &gt; &gt; &gt;             rules-users-bounc<br>
&gt; cc<br>
&gt; &gt; &gt; &gt;             es@lists.jboss.or<br>
&gt; &gt; &gt; &gt;             g<br>
&gt; Subject<br>
&gt; &gt; &gt; &gt;                                       [rules-users] &quot;Exists&quot; CE<br>
&gt; behaviour<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;             13/07/2009 14:11<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;             Please respond to<br>
&gt; &gt; &gt; &gt;             Rules Users List<br>
&gt; &gt; &gt; &gt;             &lt;rules-users@list<br>
&gt; &gt; &gt; &gt;               <a href="http://s.jboss.org" target="_blank">s.jboss.org</a>&gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Hi ,<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I&#39;m trying to use the Exists keyword within my rules with the<br>
&gt; following<br>
&gt; &gt; &gt; &gt; snippet :<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; // Create a session<br>
&gt; &gt; &gt; &gt; KnowledgeBaseConfiguration config =<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; KnowledgeBaseFactory.newKnowledgeBaseConfiguration();<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; ((RuleBaseConfiguration)config).setRuleBaseUpdateHandler(<br>
&gt; &gt; &gt; null ); *<br>
&gt; &gt; &gt; &gt; KnowledgeBase kbase =<br>
&gt; &gt; &gt; KnowledgeBaseFactory.newKnowledgeBase(config);<br>
&gt; &gt; &gt; &gt; StatefulKnowledgeSession session =<br>
&gt; &gt; &gt; kbase.newStatefulKnowledgeSession();<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; // Add some objects<br>
&gt; &gt; &gt; &gt; for (int i=0; i&lt;5; i++) {<br>
&gt; &gt; &gt; &gt; }<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; // Add a DRL to the kbase<br>
&gt; &gt; &gt; &gt; KnowledgeBuilder kbuilder =<br>
&gt; &gt; &gt; KnowledgeBuilderFactory.newKnowledgeBuilder();<br>
&gt; &gt; &gt; &gt; kbuilder.add( ResourceFactory.newClassPathResource(<br>
&gt; &gt; &gt; &quot;test/existsTest.drl&quot;<br>
&gt; &gt; &gt; &gt; ), ResourceType.DRL);<br>
&gt; &gt; &gt; &gt; kbase.addKnowledgePackages(<br>
&gt; &gt; &gt; kbuilder.getKnowledgePackages() );<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; // Fire rules<br>
&gt; &gt; &gt; &gt; int fireCount = session.fireAllRules();<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; existsTest.drl :<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; rule &quot;existsTest&quot;<br>
&gt; &gt; &gt; &gt; ( Foo() ) ); (2)<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; end<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; When launched , the rule is not fired (no messages , fireCount 0), but<br>
&gt; it<br>
&gt; &gt; &gt; &gt; is when changing<br>
&gt; &gt; &gt; &gt; exists with a double not condition (2).<br>
&gt; &gt; &gt; &gt; If the working memory is populated after adding the rules file, the<br>
&gt; exists<br>
&gt; &gt; &gt; &gt; CE works as expected.<br>
&gt; &gt; &gt; &gt; * I&#39;ve used no RuleBaseUpdateHandler preventing automatic activations<br>
&gt; to<br>
&gt; &gt; &gt; be<br>
&gt; &gt; &gt; &gt; executed so fireAllRules can be used to get the fireCount, but<br>
&gt; commenting<br>
&gt; &gt; &gt; &gt; this line out doesn&#39;t change the results.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Probably i&#39;m doing something wrong so a little help would be very<br>
&gt; &gt; &gt; &gt; appreciated.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Regards,<br>
&gt; &gt; &gt; &gt; Manuel.<br>
&gt; &gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; &gt; rules-users mailing list<br>
&gt; &gt; &gt; &gt; <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
&gt; &gt; &gt; &gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; &gt; rules-users mailing list<br>
&gt; &gt; &gt; &gt; <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
&gt; &gt; &gt; &gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; _______________________________________________<br>
&gt; &gt; &gt; rules-users mailing list<br>
&gt; &gt; &gt; <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
&gt; &gt; &gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; rules-users mailing list<br>
&gt; &gt; <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
&gt; &gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; rules-users mailing list<br>
&gt; <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
&gt;<br>
&gt;<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>