在前2部教程中,介紹瞭如何在本地運行.drools文件以及使用stateless的方法訪問遠程repository上的規則。 KIE Drools還提供了一種叫有狀態-stateful的訪問方式。
運行KIE-DROOLS上的規則-另一種寫法
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);
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());
KieSession kieSession = kContainer.newKieSession();
try {
PaymentInfo m = new PaymentInfo();
m.setMoneyAmount(10000);
kieSession.insert(m);
kieSession.fireAllRules();
System.out.println(m.getDecisionPath());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
kieSession.dispose();
} catch (Exception e) {
}
}
其區別在於:
這是一個stateful(有狀態)session的調用,上一個教程中的例子裏面我們是一個無狀態的調用。
Stateful VS Stateless
Stateless
即無狀態調用,比如說FACT A裏的值初始爲0。當這條規則被執行完成後自動斷開連接並釋放。
Stateful
即有狀態調用,比如說FACT A裏的值初始爲0,當某一條Request把其值修改爲20時在代碼沒有顯示的調用dispose時,這個值會一直維持着。
因此在對於Stateful Session的調用完畢後要顯示的去“手工”關閉和釋放它,如下面的代碼:
finally {
try {
kieSession.dispose();
} catch (Exception e) {
}
}
邁向SOA的第一步
重新來看“基於BRMS的系統邏輯架構”
再回過頭來思考下面3句話:
IT人員的還本歸宗,業務交由業務開發人員,IT人員只觀注於技術的實現;
降低產品、項目中技術集成的複雜性;
容易培養出領域高手:即IT開發人員只需要關注於自己的某一塊領域如:流程開發專家、數據庫專家、前臺特效程序員、系統實施、集成、管理專家。
規則結合BPM(工作流)的典型應用場景
還是看不懂? 沒關係,來看下面這個例子
當流程流轉到“員工提交報銷金額時”,此時有一個Decision節點,該節點通過返回“path(M或者GM)”,一旦BPM的Decision的path得到了這個值,BPM會自動決定下一步流程的走向到底是“報經理批”還是“再報總經理批”這樣兩條路徑中來作一個選擇。
希望你通過這個例子明白什麼叫“IT能夠快速響應頻繁的業務變化”、什麼叫24*7、什麼叫“加速業務走向市場”這些話的意思了吧。
什麼是SOA
SOA對業務和銷售人員來說意味着什麼
SOA對企業、客戶方的業務人員來說意味着什麼
SOA對IT開發人員來說意味着什麼
'
作業
結束本次教程,留個涉作業給大家
微信號如下,歡迎一起交流