随笔-16  评论-54  文章-0  trackbacks-0
(本文档的全篇可以到博客下面的文件列表下载,地址下面) 
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 阅读(1612) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: