Drools 是一款基于Java 的开源规则引擎,所以在使用Drools 之前需要在开发机器上安装好JDK 环境,Drools5 要求的JDK 版本要在1.5 或以上。

Drools5 提供了一个基于Eclipse3.4 的一个IDE 开发工具,所以在使用之前需要到http://eclipse.org 网站下载一个3.4.x 版本的Eclipse , 下载完成之后, 再到
http://jboss.org/drools/downloads.html 网站,下载Drools5 的Eclipse 插件版IDE 及Drools5的开发工具包,如图1-1 所示。

Drools规则引擎环境搭建

将下载的开发工具包及IDE 包解压到一个非中文目录下,解压完成后就可以在Eclipse3.4 上安装Drools5 提供的开发工具IDE 了。

打开Eclipse3.4 所在目录下的links 目录(如果该目录不存在可以手工在其目录下创建一个links 目录),在links 目录下创建一个文本文件,并改名为drools5-ide.link,用记事本打开该文件,按照下面的版本输入Drools5 Eclipse Plugin 文件所在目录:path=D:\\eclipse\\drools-5.0-eclipse-all这个值表示Drools5 Eclipse Plugin 文件位于D 盘eclipse 目录下的drools-5.0-eclipse-all下面,这里有一点需要注意,那就是drools-5.0-eclipse-all 文件夹下必须再包含一个eclipse目录,所有的插件文件都应该位于该eclipse 目录之下,接下来要在win dos 下重启Eclipse 3.4,检验Drools5 IDE 是否安装成功。进入win dos,进入Eclipes3.4 所在目录,输入eclipse –clean 启动Eclipse3.4。启动完成后打开菜单WindowPreferences,在弹出的窗口当中如果能在左边导航树中发现Drools 节点就表示Drools5 IDE 安装成功了,如图1-2 所示。

Drools规则引擎环境搭建

IDE 安装完成后,接下来需要对Drools5 的IDE 环境进行简单的配置,打开菜单WindowPreferences,在弹出的窗口当中选择左边导航树菜单DroolsInstalled Drools
Runtimes 设置Drools5 IDE 运行时依赖的开发工具包,点击“Add…”按钮添加一个开发工具包,如图1-3 所示。

Drools规则引擎环境搭建

图 1-3 当中添加了一个开发工具包,名称为“drools-5.0.0”,对应的工具包目录为D 盘doc\about rule\drools5.x\drools-5.0-bin 目录。添加完成后这样Drools5 的开发环境就搭好了。
下面我们就来利用这个环境编写一个规则看看运行效果。

编写第一个规则

环境搭建好后,新建一个Drools Project项目,为项目取好名字后直接finish。

项目结构如图1-4

Drools规则引擎环境搭建

我们打开DroolsTest.java看看

 1 package com.sample;
 2 
 3 import org.drools.KnowledgeBase;
 4 import org.drools.KnowledgeBaseFactory;
 5 import org.drools.builder.KnowledgeBuilder;
 6 import org.drools.builder.KnowledgeBuilderError;
 7 import org.drools.builder.KnowledgeBuilderErrors;
 8 import org.drools.builder.KnowledgeBuilderFactory;
 9 import org.drools.builder.ResourceType;
10 import org.drools.io.ResourceFactory;
11 import org.drools.logger.KnowledgeRuntimeLogger;
12 import org.drools.logger.KnowledgeRuntimeLoggerFactory;
13 import org.drools.runtime.StatefulKnowledgeSession;
14 
15 /**
16  * This is a sample class to launch a rule.
17  */
18 public class DroolsTest {
19 
20     public static final void main(String[] args) {
21         try {
22             // load up the knowledge base
23             KnowledgeBase kbase = readKnowledgeBase();
24             StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
25             KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");
26             // go !
27             Message message = new Message();
28             message.setMessage("Hello World");
29             message.setStatus(Message.HELLO);
30             ksession.insert(message);
31             ksession.fireAllRules();
32             logger.close();
33         } catch (Throwable t) {
34             t.printStackTrace();
35         }
36     }
37 
38     private static KnowledgeBase readKnowledgeBase() throws Exception {
39         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
40         kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL);
41         KnowledgeBuilderErrors errors = kbuilder.getErrors();
42         if (errors.size() > 0) {
43             for (KnowledgeBuilderError error: errors) {
44                 System.err.println(error);
45             }
46             throw new IllegalArgumentException("Could not parse knowledge.");
47         }
48         KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
49         kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
50         return kbase;
51     }
52 
53     public static class Message {
54 
55         public static final int HELLO = 0;
56         public static final int GOODBYE = 1;
57 
58         private String message;
59 
60         private int status;
61 
62         public String getMessage() {
63             return this.message;
64         }
65 
66         public void setMessage(String message) {
67             this.message = message;
68         }
69 
70         public int getStatus() {
71             return this.status;
72         }
73 
74         public void setStatus(int status) {
75             this.status = status;
76         }
77 
78     }
79 
80 }
View Code

相关文章:

  • 2021-10-07
  • 2021-11-10
  • 2021-11-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-20
  • 2022-12-23
  • 2022-03-08
  • 2021-12-22
相关资源
相似解决方案