jboss規則引擎KIE Drools 6.3.0 Final 教程(2)
使用JAVA程式調用規則-運行KIE-DROOLS上的規則
第一步:建立一個MAVEN的Java工程 POM.XML給出pom.xml檔案
4.0.0os.nut.droolsdrools-training0.0.1-SNAPSHOT6.3.0.Finalguvnor-m2-repoGuvnor M2 Repohttp://192.168.0.101:8080/kie-drools/maven2/org.kiekie-api${drools.version}org.droolsdrools-core${drools.version}org.droolsdrools-compiler${drools.version}org.droolsdrools-decisiontables${drools.version}org.droolsdrools-templates${drools.version}org.kiekie-ci${drools.version}junitjunit4.7testPOM.XML解釋關鍵在於下面這兩段: Java程式通過遠程地址讀取kie-drools倉庫內的規則用的就是這個包。 第二步: 工程結構 保持和遠程KIE-DROOLS上的package名字一樣 PaymentInfo.java檔案你可以直接把kie-drools內的data object裡的這個Facts代碼存到你本地來 編寫遠程調用用戶端
package org.sky.drools.approvaldecision;import java.io.InputStream;import org.drools.compiler.kproject.ReleaseIdImpl;import org.drools.core.io.impl.UrlResource;import org.kie.api.KieServices;import org.kie.api.builder.KieModule;import org.kie.api.builder.KieRepository;import org.kie.api.runtime.KieContainer;import org.kie.api.runtime.StatelessKieSession;public class RemotePaymentRulz {public static void main(String[] args) throws Exception { String url = "http://192.168.0.101:8080/kie-drools/maven2/org/sky/drools/ApprovalDecision/1.0.0/ApprovalDecision-1.0.0.jar"; ReleaseIdImpl releaseId = new ReleaseIdImpl("org.sky。drools", "ApprovalDecision", "LATEST"); KieServices ks = KieServices.Factory.get(); KieRepository kr = ks.getRepository(); UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url); urlResource.setUsername("tomcat"); urlResource.setPassword("tomcat"); urlResource.setBasicAuthentication("enabled"); InputStream is = urlResource.getInputStream(); KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is)); KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId()); StatelessKieSession kSession = kContainer.newStatelessKieSession("defaultStatelessKieSession"); PaymentInfo m = new PaymentInfo(); m.setMoneyAmount(5001); kSession.execute(m); System.out.println(m.getDecisionPath()); if (m.getDecisionPath().equalsIgnoreCase("m")) {System.out.println("數額<=5000需要經理審批"); } else { System.out.println("數額>5000需要總經理審批"); }}}
遠程用戶端核心代碼解釋
String url = "http://192.168.0.101:8080/kie-drools/maven2/org/sky/drools/ApprovalDecision/1.0.0/ApprovalDecision-1.0.0.jar";KieServices ks = KieServices.Factory.get();KieRepository kr = ks.getRepository();UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url);
以上代碼很簡單,它告訴JAVA,需要上哪兒去調用我們位於遠程布署的規則
urlResource.setUsername("tomcat");urlResource.setPassword("tomcat");urlResource.setBasicAuthentication("enabled");InputStream is = urlResource.getInputStream();KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is));KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());
以上代碼做的事情就是相當於在IE中開啟KIE-DROOLS的Web地址,然後輸入使用者名稱、密碼並點擊登入
StatelessKieSession kSession = kContainer.newStatelessKieSession("defaultStatelessKieSession");PaymentInfo m = new PaymentInfo();m.setMoneyAmount(5001);kSession.execute(m);System.out.println(m.getDecisionPath());if (m.getDecisionPath().equalsIgnoreCase("m")) {System.out.println("數額<=5000需要經理審批");} else {System.out.println("數額>5000需要總經理審批");}
這段代碼用的就是statelessSession介面去調用規則的。
由於規則中有一句話“
modify (m) { setDecisionPath("GM") };”
因此規則會依據傳入的
PaymentInfo.paymentAmount的值去修改
PaymentInfo.decisionPath的值。 運行用戶端代碼寫完了,先不要急著運行!!!
因為我們還沒有把我們位於KIE-DROOLS上的項目產生:
org/sky/drools/ApprovalDecision/1.0.0/ApprovalDecision-1.0.0.jar
如上述這樣的可用“資源”呢!!!
將規則項目產生可供遠程調用的“資源”,按照下面步驟來做:
讓我們來看看我們BUILD後產生的可供遠程調用的資源清單吧 來看看運行後的效果吧 結合多變的業務情境來考慮使用BRMS 現在結合規則讓我們來考慮一下,當我們的業務提出變化後,IT是如何快速相應的吧。 第一步:開啟規則引擎,直接online改變規則 第二步:online運行改變規則後的測試案例 第三步:交業務部門審核測試結果 第四步:線上重build規則工程 第五步:看JAVA代碼執行結果 在實際Web應用中無須改動代碼、
無須重啟 結束本次教程後面的教程會講述stateful(有狀態)和stateless(無狀態)2種的區別,文中也會給出相應的對比和講解。 所以:今天我們使用的是一種
stateless的訪問方式。