計算を行うサンプルプログラム
次に、JBoss Rules を用いた簡単な計算を行うサンプルプログラムを作成します。
このような単純な計算のみをルールベースで行うことは実用上あまりありませんが、ルールベースのプログラミングの特徴をあらわすサンプルとしていくつかをあげてみましょう。
(1) 1から100までを足すプログラム 
まず、数を表すクラスNumberFactを作りましょう。これは、Javaのクラスであると同時に、ワーキングメモリ上のファクトにも対応します。
NumberFact.java
| package com.sample; public class NumberFact {private String name;
 private int number;
     public NumberFact(String name, int number) {super();
 this.name = name;
 this.number = number;
 }
     public String getName() {return name;
 }
     public void setName(String name) {this.name = name;
 }
     public int getNumber() {return number;
 }
     public void setNumber(int number) {this.number = number;
 }
 
     //数を加えるpublic void add(NumberFact numFact) {
 this.number = this.number + numFact.getNumber();
 }
 
     //1を足すpublic void add1() {
 this.number = this.number + 1;
 }
 }
 | 
次に、メインプログラムは、以下のとおりです。
DroolsTest.java
| package com.sample; import java.io.InputStreamReader;
 import java.io.Reader;
 import org.drools.RuleBase;import org.drools.RuleBaseFactory;
 import org.drools.WorkingMemory;
 import org.drools.compiler.PackageBuilder;
 import org.drools.rule.Package;
 /*** This is a sample file to launch a rule package from a rule source file.
 */
 public class DroolsTest {
     public static final void main(String[] args) {try {
 
 //load up the rulebase
 RuleBase ruleBase = readRule();
 WorkingMemory workingMemory = ruleBase.newWorkingMemory();
 
 //カウンタの初期設定
 NumberFact numFact1 = new NumberFact(“counter”,1);
 workingMemory.assertObject( numFact1 );
 //和
 NumberFact numFact2 = new NumberFact(“sum”,0);
 workingMemory.assertObject( numFact2 );
 // ~まで
 NumberFact numFact3 = new NumberFact(“limit”,100);
 workingMemory.assertObject( numFact3 );
 workingMemory.fireAllRules();
 
          } catch (Throwable t) {t.printStackTrace();
 }
 }
   /**     * Please note that this is the “low level” rule assembly API.     */ 
 private static RuleBase readRule() throws Exception {Reader source = new InputStreamReader(
 DroolsTest.class.getResourceAsStream( “/Sample.drl” ) );
 PackageBuilder builder = new PackageBuilder();
 builder.addPackageFromDrl( source );
 Package pkg = builder.getPackage();
 RuleBase ruleBase = RuleBaseFactory.newRuleBase();
 ruleBase.addPackage( pkg );
 return ruleBase;
 }
 } | 
1から100までを数えるカウンター(counter)というファクトと、足し算の結果を保持するファクト、足し算の最後の数を表すリミット(Limit)を最初に登録(assert)して、その後ルールを走らせます。
ルールファイルであるsample.drlは以下のとおりです。
sample.drl
| package com.sample
 import com.sample.NumberFact; rule “count1”when
 counter: NumberFact( name == “counter”,num : number)
 sumFact:  NumberFact( name == “sum”, sum : number)
 then
 sumFact.add(counter);
 modify( sumFact );
 counter.add1();
 modify(counter);
 end
 rule “watch”when
 NumberFact( name == “limit”, lim : number )
 counter: NumberFact( name == “counter”,num : number > lim )
 NumberFact( name == “sum”, sum : number)
 then
 System.out.println(“sum of 1..”+lim+” = “+sum);
 retract(counter);
 end
 | 
 これを実行すると
 sum of 1..100 = 5050
という結果が表示されます。