<div dir="ltr">For the sake of completeness, here is also the RuleRunner class used in this example:<div><br></div><div><div>package org.drools.tutorials.banking;</div><div><br></div><div>import java.util.Collection;</div>
<div><br></div><div>import org.drools.KnowledgeBase;</div><div>import org.drools.KnowledgeBaseFactory;</div><div>import org.drools.builder.KnowledgeBuilder;</div><div>import org.drools.builder.KnowledgeBuilderFactory;</div>
<div>import org.drools.builder.ResourceType;</div><div>import org.drools.definition.KnowledgePackage;</div><div>import org.drools.io.ResourceFactory;</div><div>import org.drools.runtime.StatefulKnowledgeSession;</div><div>
<br></div><div>public class RuleRunner {</div><div><br></div><div> public RuleRunner() {</div><div> }</div><div><br></div><div> public void runRules(String[] rules,</div><div> Object[] facts) {</div>
<div><br></div><div> KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();</div><div> KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();</div><div><br></div><div> for ( int i = 0; i < rules.length; i++ ) {</div>
<div> String ruleFile = rules[i];</div><div> System.out.println( "Loading file: " + ruleFile );</div><div> kbuilder.add( ResourceFactory.newClassPathResource( ruleFile,</div><div>
RuleRunner.class ),</div><div> ResourceType.DRL );</div><div> }</div><div><br></div><div> Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();</div>
<div> kbase.addKnowledgePackages( pkgs );</div><div> StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();</div><div><br></div><div> for ( int i = 0; i < facts.length; i++ ) {</div>
<div> Object fact = facts[i];</div><div> System.out.println( "Inserting fact: " + fact );</div><div> ksession.insert( fact );</div><div> }</div><div><br></div><div> ksession.fireAllRules();</div>
<div> }</div><div>}</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/4/18 Stefan Schuster <span dir="ltr"><<a href="mailto:stefan.m.schuster@gmail.com" target="_blank">stefan.m.schuster@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hello,<div><br></div><div>I have a problem with the banking tutorial number 3, which is part of the examples of drools expert.</div>
<div>It simply adds some Numbers as facts, and retracts them in an increasing order.</div>
<div><br></div><div>It is very short, therefore I post the whole Code:</div><div><br></div><div><br></div><div>BankingExample3.java</div><div>_________________________________________________<br>
</div><div><div>package org.drools.tutorials.banking;</div><div><br></div><div>public class BankingExample3 {</div><div> public static void main(String[] args) {</div><div> Number[] numbers = new Number[] {wrap(3), wrap(1), wrap(4), wrap(1), wrap(5)};</div>
<div> new RuleRunner().runRules( new String[] { "Example3.drl" },</div><div> numbers );</div><div> }</div><div> </div><div> private static Integer wrap(int i) {</div>
<div> return new Integer(i);</div><div> }</div><div>}</div><div>_________________________________________________<br></div><div><br></div><div><br></div><div><br></div><div>Example3.drl:</div><div>_________________________________________________<br>
</div><div><div>package org.drools.tutorials.banking</div><div> </div><div>rule "Rule 01" </div><div> when</div><div> $number : Number()</div><div> not Number( intValue < $number.intValue )</div>
<div> then</div><div> System.out.println("Number found with value: " + $number.intValue() ); </div><div> retract( $number );</div><div>end </div><div>_________________________________________________<br>
</div><div><br></div><div><br></div><div>Output:</div><div>_________________________________________________<br></div><div><div>Loading file: Example3.drl</div><div>Inserting fact: 3</div><div>Inserting fact: 1</div>
<div>Inserting fact: 4</div><div>Inserting fact: 1</div><div>Inserting fact: 5</div><div>Number found with value: 1</div><div>Number found with value: 1</div><div>Number found with value: 3</div><div>Number found with value: 4</div>
<div>Number found with value: 5</div><div>_________________________________________________</div><div><br></div><div><br></div></div><div>that seams absolute logically to me.</div><div>But now I alter the Numbers in the Java-Part:</div>
<div> Number[] numbers = new Number[] {wrap(3), wrap(1), wrap(2)};<br></div><div><br></div><div>and the output destroys everything I thought I understood:</div><div><div>Loading file: Example3.drl</div>
<div>Inserting fact: 3</div><div>Inserting fact: 1</div><div>Inserting fact: 2</div><div>Number found with value: 1</div><div>Number found with value: 3</div><div>Number found with value: 2</div></div></div><div><br>
</div><div><br></div></div><div>Can someone reproduce this behavior?? It seams absolutely strange to me. I would have expected the order 1,2,3. Any explanations?</div><div><br></div><div>Thanks in advance for helping me!</div>
<div><br></div><div><br></div></div>
</blockquote></div><br></div>