(本文档的全篇可以到博客下面的文件列表下载,地址下面)  
http://www.blogjava.net/jspark/admin/Files.aspx
为了让尽快对jbossRules有一个感官的认识,下面先开发一个HelloWorld的程序。
建立一个java工程,目录如下:
 
 
如上所示,建立一个com包,然后在下面分别建立一个Sample.drl文件和DroolsTest.java文件。
Sample.drl是一个规则文件,内容如下:
 
package com
 
import com.DroolsTest.Message;
 
rule "Hello World"
    when
       m : Message( status == Message.HELLO, message : message )
    then
       System.out.println( message ); 
       m.setMessage( "Goodbye cruel world" );
       m.setStatus( Message.GOODBYE );
       update( m );
end
 
rule "GoodBye"
    no-loop true
    when
       m : Message( status == Message.GOODBYE, message : message )
    then
       System.out.println( message ); 
       m.setMessage( message );
       
end
 
DroolsTest.java是测试以上规则的JAVA程序,内部代码如下:
 
 
package com;
 
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.newStatefulSession();
            
            //go !
            Message message = new Message();
            message.setMessage(  "Hello World" );
            message.setStatus( Message.HELLO );
            workingMemory.insert( message );
            workingMemory.fireAllRules();   
            
            
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
 
    /**
     * Please note that this is the "low level" rule assembly API.
     */
    private static RuleBase readRule() throws Exception {
       //read in the source
       Reader source = new InputStreamReader( DroolsTest.class.getResourceAsStream( "/com/Sample.drl" ) );
       
       //optionally read in the DSL (if you are using it).
       //Reader dsl = new InputStreamReader( DroolsTest.class.getResourceAsStream( "/mylang.dsl" ) );
 
       //Use package builder to build up a rule package.
       //An alternative lower level class called "DrlParser" can also be used...
       
       PackageBuilder builder = new PackageBuilder();
 
       //this wil parse and compile in one step
       //NOTE: There are 2 methods here, the one argument one is for normal DRL.
       builder.addPackageFromDrl( source );
 
       //Use the following instead of above if you are using a DSL:
       //builder.addPackageFromDrl( source, dsl );
       
       //get the compiled package (which is serializable)
       Package pkg = builder.getPackage();
       
       //add the package to a rulebase (deploy the rule package).
       RuleBase ruleBase = RuleBaseFactory.newRuleBase();
       ruleBase.addPackage( pkg );
       return ruleBase;
    }
    
    public static class Message {
       public static final int HELLO = 0;
       public static final int GOODBYE = 1;
       
       private String message;
       
       private int status;
       
       public String getMessage() {
           return this.message;
       }
       
       public void setMessage(String message) {
           this.message = message;
       }
       
       public int getStatus() {
           return this.status;
       }
       
       public void setStatus( int status ) {
           this.status = status;
       }
    }
}
 
运行DroolsTest.java程序,可以看到如下输出结果:
 
Hello World
Goodbye cruel world
 
以上就是一个最简单的jbossRules规则系统的例子。下面将具体讲解jbossRules的详细结构和语法。
	posted on 2008-10-28 15:54 
jspark 阅读(1648) 
评论(0)  编辑  收藏