原文地址:http://docs./drools/release/6.2.0.Final/drools-docs/html_single/index.html 原文前面所有的步骤都可以省略,直接从安装eclipse插件开始,安装地址是:http://docs./drools/release/6.2.0.Final/drools-docs/html_single/index.html 在国内现在是可以直接update,所以不需要用zip安装之类的方法。 在eclipse的Preferences中出现了一个菜单Drools,在installed Drools里面add一个Runtime(选择官网下载后解压缩的binaries目录)。 新建一个Drools Project src/main/java新建类DroolsTest: package com.sample; import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; / * This is a sample class to launch a rule. */ public class DroolsTest { public static final void main(String[] args) { try { // load up the knowledge base KieServices ks = KieServices.Factory.get(); KieContainer kContainer = ks.getKieClasspathContainer(); KieSession kSession = kContainer.newKieSession("ksession-rules"); // go ! Message message = new Message(); message.setMessage("Hello World"); message.setStatus(Message.HELLO); kSession.insert(message); kSession.fireAllRules(); } catch (Throwable t) { t.printStackTrace(); } } 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; } } }
src/main/resources/rules新建规则文件 package com.sample import com.sample.DroolsTest.Message; rule "Hello World" when m : Message( status == Message.HELLO, myMessage : message ) then System.out.println( myMessage ); m.setMessage( "Goodbye cruel world" ); m.setStatus( Message.GOODBYE ); update( m ); end rule "GoodBye" when Message( status == Message.GOODBYE, myMessage : message ) then System.out.println( myMessage ); end src/main/resources/META-INF新建配置文件kmodule.xml: <?xml version="1.0" encoding="UTF-8"?> <kmodule xmlns="http:///kie/6.0.0/kmodule"> <kbase name="rules" packages="rules"> <ksession name="ksession-rules"/> </kbase> </kmodule> 点击run可以看到结果: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www./codes.html#StaticLoggerBinder for further details. Hello World Goodbye cruel world 讲解一下这个例子的逻辑:main函数前三行是固定写法,它加载"ksession-rules"。这个名字在kmodule.xml里面配置,它会在resources目录下的rules目录下去找规则。 main函数先写一个类型为Message.HELLO类型的消息到对象中,规则文件中规定如果类型为Message.HELLO则打印出消息并且更新对象类型Message.GOODBYE, 因为update(m)这时候规则引擎将会被再次触发,因为类型更新为Message.GOODBYE将会触发规则2,打印出新类型的消息。
怎么样在Maven中使用Drools: drools在maven中央仓库中就有,所以不需要配置额外的maven仓库,配置如下: <dependencies> <dependency> <groupId>org.drools</groupId> <artifactId>drools-bom</artifactId> <type>pom</type> <version>...</version> <scope>import</scope> </dependency> ... </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.kie</groupId> <artifactId>kie-api</artifactId> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <scope>runtime</scope> </dependency> ... <dependencies>
运行时: 这里说的运行时是指:如果你部署二进制形式的规则(KnowledgePackage对象或者KnowledgeBase对象),这样可以让你的运行时非常轻量化。可以用drools-compiler来生成规则包然后把它们部署到运行时环境。运行时环境只需要drool-core.jar和knowledge-api.jar来运行。 Rule Workbench(规则工作台) 需要Eclipse3.4以上(GEF插件3.4以上) 要不然就是用JBoss的IDE,集成好了。 通过http://www./drools/downloads.html 链接找到对应的Drools plug-in安装地址。 Drools运行时: 这里的运行时表示的是jar包集合,其实就是下载的不同版本的Drools。Eclipse需要一个默认的的Drools运行时。 从源代码构建Drools: Drools和jBPM使用Git来做版本控制。链接为:https://github.com/droolsjbpm 比如guvnor子项目,build方法如下: $ git clone git@github.com:droolsjbpm/guvnor.git ... $ cd guvnor $ mvn clean install -DskipTests -Dfull ...从6.0开始KIE,Drools(包括工作台),jBPM(包括设计器和控制台),OptaPlanner将共享相同的版本号。 KIE是什么? KIE是一个被Drools和jBPM共享的底层库,它提供一个统一的基本方法、编程模型来构建,部署且提供了工具集。 KIE的结构:
OptaPlanner是一个本地搜索和优化工具,它现在是一个和Drools和jBPM同样的顶级项目。 Dashboard Builder是一个强大的报表工具。它独立于Drools和jBPM。 UberFire是工作台项目的基础组件,他提供了类似Eclipse样式的工作台能力(比如插件)。它也是独立于Drools和jBPM。 Guvnor在5.0里面承担了太多的职责。在6.0里面它将专注于封装UberFire插件用户构建web的IDE。 Drools和jBPM工作台的发行版本使用UberFire作为基础然后加上一些插件Guvnor以及Drools、jBPM自己的插件像decision table,guided editor,BPMN2 designer,human task。
KIE的生命周期 编辑 用可视化工具例如DRL BPMN2,decision table, class models等 编辑知识库(knowledge) 构建 把上一步编辑的知识库构建为部署单元,对于KIE这个部署单元就是jar。 测试 把jar部署到应用前请测试 部署 把jar部署到一个应用可以使用的位置 KIE使用maven风格的仓库 使用(Utilize) 加载jar然后提供一个KieSession对象,这样应用就可以和它交互了。 运行 系统通过KieSession的API和它交互 工作 用户通过UI或者命令行调用到它 管理 管理所有的KIESession或者KIEContainer
构建,部署,使用和运行 6.0引入了一个新配合和方法来build知识库,而5.0是用编程的方式,当然这个编程的方式为了向后兼容还是可用的。 KIE项目或者模块其实就是一个Maven的项目或者模块,仅仅在META-INF目录下面多了一个kmodule.xml。这个文件是用来描述选择那些知识库和配置知识库的session。它可以通过spring或者OSGI BluePrints来提供xml支持。
虽然maven可以构建和部署KIE项目,但有个插件,它会生成很多类文件,可以提供校验功能并且运行速度会更快。 示例图:
org.kie.api.core.builder内容 KieContainer Example 4.2. 创建KieContainer
|
|