After downloading and extracting the source (http://www.jboss.org/drools/downloads.html) I navigated to the root folder of all the drools projects, drools-5. Here, I ran mvn install. The 'out of memory error' prompted me to increase the memory available with the command export MAVEN_OPTS='-Xmx768m'. I reran the mvn install with no more problems.
Create the ANT file, not to build Drools again but just for a convenient way to run the example.
<project name="run-drools-examples" default="run" basedir="."> <path id="classpath"> <fileset dir="drools-api/target" includes="**/*.jar"/> <fileset dir="drools-clips/target" includes="**/*.jar"/> <fileset dir="drools-compiler/target" includes="**/*.jar"/> <fileset dir="drools-core/target" includes="**/*.jar"/> <fileset dir="drools-guvnor/target" includes="**/*.jar"/> <fileset dir="drools-jsr94/target" includes="**/*.jar"/> </path> <target name="run"> <java fork="true" classname="org.drools.examples.FibonacciExample"> <classpath> <path refid="classpath"/> <path location = "drools-examples/drools-examples-drl/target/classes"/> </classpath> </java> </target> </project>
[greg: drools-5] mkdir log [greg: drools-5] ant Buildfile: build.xml run: [java] recurse for 10 [java] recurse for 9 [java] recurse for 8 [java] recurse for 7 [java] recurse for 6 [java] recurse for 5 [java] recurse for 4 [java] recurse for 3 [java] recurse for 2 [java] 1 == 1 [java] 2 == 1 [java] 3 == 2 [java] 4 == 3 [java] 5 == 5 [java] 6 == 8 [java] 7 == 13 [java] 8 == 21 [java] 9 == 34 [java] 10 == 55 BUILD SUCCESSFUL Total time: 3 seconds [greg: drools-5]To see the rule that is being run, edit the source code mate drools-examples/drools-examples-drl and view src/rules/org/drools/examples/Fibonicci.drl
package org.drools.examples import org.drools.examples.FibonacciExample.Fibonacci; dialect "mvel" rule Recurse salience 10 when not ( Fibonacci ( sequence == 1 ) ) f : Fibonacci ( value == -1 ) then insert( new Fibonacci( f.sequence - 1 ) ); System.out.println( "recurse for " + f.sequence ); end rule Bootstrap when // this is a multi-restriction || on a single field f : Fibonacci( sequence == 1 || == 2, value == -1 ) / then modify ( f ){ value = 1 }; System.out.println( f.sequence + " == " + f.value ); end rule Calculate when f1 : Fibonacci( s1 : sequence, value != -1 ) // here we bind sequence f2 : Fibonacci( sequence == (s1 + 1 ), value != -1 ) // here we don't, just to demonstrate //the different way bindings can be used f3 : Fibonacci( s3 : sequence == (f2.sequence + 1 ), value == -1 ) then modify ( f3 ) { value = f1.value + f2.value }; // see how you can access pattern and field bindings System.out.println( s3 + " == " + f3.value ); end
http://www.onjava.com/pub/a/onjava/2005/08/03/drools.html
http://www.onjava.com/pub/a/onjava/2005/08/24/drools.html
http://www.developer.com/java/ent/article.php/3821101
http://www.infoq.com/news/2009/06/drools-5.0-release
http://java.dzone.com/articles/solving-planning-problems-intr
http://www.oreillynet.com/onjava/blog/2007/10/does_your_bad_java_code_need_h.html
http://downloads.jboss.com/drools/docs/5.0.1.26597.FINAL/drools-expert/html_single/index.html