Hello, Rules...
No programming introduction without the famous "HelloWorld" example - I shall make no exception. Whereas I regard it as complete nonsense to use a rule-engine to utter greetings, this simple example shows
Overview
You need four things to run a rule-based system (that is an application using a rule-engine):
- The rule-engine itself. I take JBoss-Rules here, you find installation instructions on their website.
- The rules, located in a file
- Your own Java classes to create some facts for the rule-engine to reason about (HelloRules.java, HelloFact.java)
- Glue-code to tie those things together. I use my simple RuleEngineWrapper here.

hello-rules.drl - Very simple
version
rule "say it alout"
when hello: HelloFact( );
then System.out.println( hello.getMessage() );
end;
When the rule engine finds an instance of class
HelloFact in working memory, it'll print
its message. As working memory might contain several
instances of HelloFact, we have to identify our
specific one by naming it "hello". In the
consequence-part of the rule we can refer to this named
instance to call its methods.
Our own Java classes
HelloRules.java
import ....RuleEngineWrapper; // the glue code to connect to
public class HelloRules {
/**
* a declarative way of greeting... using JBoss-Rules
*/
public static void main(String[] args) {
RuleEngineWrapper rew =
new RuleEngineWrapper("hello-rules.drl");
HelloFact helloFact =
new HelloFact( "hello, rules");
rew.addFact( helloFact ); // put it into working memory
rew.addFact( new HelloFact("Allo, bon jour!") ); // another one
rew.executeRules();
}
}
To improve our hello-world experience, I added two instances of HelloFact to the working memory.
HelloFact.java
The HelloFact-class follows the JavaBean conventions and therefore contains getters and setters for all its (public) attributes. I omitted those for brevity.
public class HelloFact {
public String message;
public HelloFact(String msg) {
super();
this.message = msg;
}
// getter and setter omitted for brevity
}
The Result
The rule engine finds two instances of HelloFact in working memory, so it schedules two activations of our simple rule, one for every found instance. The output, as you expected:
Allo, bon jour!
hello, rules
Remark: It works fine with JBoss-Rules V.3.0.6, but fails with the 4.0.M1 release. I did not yet test it with 4.0.M3 release...
The Glue Code
I used my simple RuleEngineWrapper to glue my own code together with the drl-file and my own classes.

