本文共 1880 字,大约阅读时间需要 6 分钟。
在前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、什么叫“加速业务走向市场”这些话的意思了吧。'
结束本次教程,留个涉作业给大家
微信号如下,欢迎一起交流