程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> jboss規則引擎KIE Drools 6.3.0 Final 教程(2)

jboss規則引擎KIE Drools 6.3.0 Final 教程(2)

編輯:JAVA綜合教程

jboss規則引擎KIE Drools 6.3.0 Final 教程(2)


使用JAVA程序調用規則-運行KIE-DROOLS上的規則

  \


第一步:建立一個MAVEN的Java工程

  \  

POM.XML

給出pom.xml文件  

	4.0.0
	os.nut.drools
	drools-training
	0.0.1-SNAPSHOT
	
		6.3.0.Final
	
	
		
			guvnor-m2-repo
			Guvnor M2 Repo
			http://192.168.0.101:8080/kie-drools/maven2/
		
	
	
		
		
			org.kie
			kie-api
			${drools.version}
		
		
			org.drools
			drools-core
			${drools.version}
		
		
			org.drools
			drools-compiler
			${drools.version}
		
		
			org.drools
			drools-decisiontables
			${drools.version}
		
		
			org.drools
			drools-templates
			${drools.version}
		
		
			org.kie
			kie-ci
			${drools.version}
		
		
		
			junit
			junit
			4.7
			test
		
	

POM.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的訪問方式。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved