在前2部教程中,介紹了如何在本地運行.drools文件以及使用stateless的方法訪問遠程repository上的規則。 KIE Drools還提供了一種叫有狀態-stateful的訪問方式。
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的調用,上一個教程中的例子裡面我們是一個無狀態的調用。
即無狀態調用,比如說FACT A裡的值初始為0。當這條規則被執行完成後自動斷開連接並釋放。
即有狀態調用,比如說FACT A裡的值初始為0,當某一條Request把其值修改為20時在代碼沒有顯示的調用dispose時,這個值會一直維持著。
因此在對於Stateful Session的調用完畢後要顯示的去“手工”關閉和釋放它,如下面的代碼:
finally { try { kieSession.dispose(); } catch (Exception e) { } }
再回過頭來思考下面3句話:
IT人員的還本歸宗,業務交由業務開發人員,IT人員只觀注於技術的實現;
降低產品、項目中技術集成的復雜性;
容易培養出領域高手:即IT開發人員只需要關注於自己的某一塊領域如:流程開發專家、數據庫專家、前台特效程序員、系統實施、集成、管理專家。
還是看不懂? 沒關系,來看下面這個例子
當流程流轉到“員工提交報銷金額時”,此時有一個Decision節點,該節點通過返回“path(M或者GM)”,一旦BPM的Decision的path得到了這個值,BPM會自動決定下一步流程的走向到底是“報經理批”還是“再報總經理批”這樣兩條路徑中來作一個選擇。
希望你通過這個例子明白什麼叫“IT能夠快速響應頻繁的業務變化”、什麼叫24*7、什麼叫“加速業務走向市場”這些話的意思了吧。
'