原文地址:http://docs./drools/release/6.2.0.Final/drools-docs/html_single/index.html 原文前面所有的步驟都可以省略,直接從安裝eclipse插件開(kāi)始,安裝地址是:http://docs./drools/release/6.2.0.Final/drools-docs/html_single/index.html 在國(guó)內(nèi)現(xiàn)在是可以直接update,所以不需要用zip安裝之類的方法。 在eclipse的Preferences中出現(xiàn)了一個(gè)菜單Drools,在installed Drools里面add一個(gè)Runtime(選擇官網(wǎng)下載后解壓縮的binaries目錄)。 新建一個(gè)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新建規(guī)則文件 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> 點(diǎn)擊run可以看到結(jié)果: 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 講解一下這個(gè)例子的邏輯:main函數(shù)前三行是固定寫法,它加載"ksession-rules"。這個(gè)名字在kmodule.xml里面配置,它會(huì)在resources目錄下的rules目錄下去找規(guī)則。 main函數(shù)先寫一個(gè)類型為Message.HELLO類型的消息到對(duì)象中,規(guī)則文件中規(guī)定如果類型為Message.HELLO則打印出消息并且更新對(duì)象類型Message.GOODBYE, 因?yàn)閡pdate(m)這時(shí)候規(guī)則引擎將會(huì)被再次觸發(fā),因?yàn)轭愋透聻镸essage.GOODBYE將會(huì)觸發(fā)規(guī)則2,打印出新類型的消息。
怎么樣在Maven中使用Drools: drools在maven中央倉(cāng)庫(kù)中就有,所以不需要配置額外的maven倉(cāng)庫(kù),配置如下: <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>
運(yùn)行時(shí): 這里說(shuō)的運(yùn)行時(shí)是指:如果你部署二進(jìn)制形式的規(guī)則(KnowledgePackage對(duì)象或者KnowledgeBase對(duì)象),這樣可以讓你的運(yùn)行時(shí)非常輕量化??梢杂胐rools-compiler來(lái)生成規(guī)則包然后把它們部署到運(yùn)行時(shí)環(huán)境。運(yùn)行時(shí)環(huán)境只需要drool-core.jar和knowledge-api.jar來(lái)運(yùn)行。 Rule Workbench(規(guī)則工作臺(tái)) 需要Eclipse3.4以上(GEF插件3.4以上) 要不然就是用JBoss的IDE,集成好了。 通過(guò)http://www./drools/downloads.html 鏈接找到對(duì)應(yīng)的Drools plug-in安裝地址。 Drools運(yùn)行時(shí): 這里的運(yùn)行時(shí)表示的是jar包集合,其實(shí)就是下載的不同版本的Drools。Eclipse需要一個(gè)默認(rèn)的的Drools運(yùn)行時(shí)。 從源代碼構(gòu)建Drools: Drools和jBPM使用Git來(lái)做版本控制。鏈接為:https://github.com/droolsjbpm 比如guvnor子項(xiàng)目,build方法如下: $ git clone git@github.com:droolsjbpm/guvnor.git ... $ cd guvnor $ mvn clean install -DskipTests -Dfull ...從6.0開(kāi)始KIE,Drools(包括工作臺(tái)),jBPM(包括設(shè)計(jì)器和控制臺(tái)),OptaPlanner將共享相同的版本號(hào)。 KIE是什么? KIE是一個(gè)被Drools和jBPM共享的底層庫(kù),它提供一個(gè)統(tǒng)一的基本方法、編程模型來(lái)構(gòu)建,部署且提供了工具集。 KIE的結(jié)構(gòu):
OptaPlanner是一個(gè)本地搜索和優(yōu)化工具,它現(xiàn)在是一個(gè)和Drools和jBPM同樣的頂級(jí)項(xiàng)目。 Dashboard Builder是一個(gè)強(qiáng)大的報(bào)表工具。它獨(dú)立于Drools和jBPM。 UberFire是工作臺(tái)項(xiàng)目的基礎(chǔ)組件,他提供了類似Eclipse樣式的工作臺(tái)能力(比如插件)。它也是獨(dú)立于Drools和jBPM。 Guvnor在5.0里面承擔(dān)了太多的職責(zé)。在6.0里面它將專注于封裝UberFire插件用戶構(gòu)建web的IDE。 Drools和jBPM工作臺(tái)的發(fā)行版本使用UberFire作為基礎(chǔ)然后加上一些插件Guvnor以及Drools、jBPM自己的插件像decision table,guided editor,BPMN2 designer,human task。
KIE的生命周期 編輯 用可視化工具例如DRL BPMN2,decision table, class models等 編輯知識(shí)庫(kù)(knowledge) 構(gòu)建 把上一步編輯的知識(shí)庫(kù)構(gòu)建為部署單元,對(duì)于KIE這個(gè)部署單元就是jar。 測(cè)試 把jar部署到應(yīng)用前請(qǐng)測(cè)試 部署 把jar部署到一個(gè)應(yīng)用可以使用的位置 KIE使用maven風(fēng)格的倉(cāng)庫(kù) 使用(Utilize) 加載jar然后提供一個(gè)KieSession對(duì)象,這樣應(yīng)用就可以和它交互了。 運(yùn)行 系統(tǒng)通過(guò)KieSession的API和它交互 工作 用戶通過(guò)UI或者命令行調(diào)用到它 管理 管理所有的KIESession或者KIEContainer
構(gòu)建,部署,使用和運(yùn)行 6.0引入了一個(gè)新配合和方法來(lái)build知識(shí)庫(kù),而5.0是用編程的方式,當(dāng)然這個(gè)編程的方式為了向后兼容還是可用的。 KIE項(xiàng)目或者模塊其實(shí)就是一個(gè)Maven的項(xiàng)目或者模塊,僅僅在META-INF目錄下面多了一個(gè)kmodule.xml。這個(gè)文件是用來(lái)描述選擇那些知識(shí)庫(kù)和配置知識(shí)庫(kù)的session。它可以通過(guò)spring或者OSGI BluePrints來(lái)提供xml支持。
雖然maven可以構(gòu)建和部署KIE項(xiàng)目,但有個(gè)插件,它會(huì)生成很多類文件,可以提供校驗(yàn)功能并且運(yùn)行速度會(huì)更快。 示例圖:
org.kie.api.core.builder內(nèi)容 KieContainer Example 4.2. 創(chuàng)建KieContainer
|
|