jboss规则引擎KIE Drools 6.3.0 Final 教程(2)

转载 2016年07月19日 16:42:18

使用JAVA程序调用规则-运行KIE-DROOLS上的规则




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




POM.XML


给出pom.xml文件

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>os.nut.drools</groupId>  
  5.     <artifactId>drools-training</artifactId>  
  6.     <version>0.0.1-SNAPSHOT</version>  
  7.     <properties>  
  8.         <drools.version>6.3.0.Final</drools.version>  
  9.     </properties>  
  10.     <repositories>  
  11.         <repository>  
  12.             <id>guvnor-m2-repo</id>  
  13.             <name>Guvnor M2 Repo</name>  
  14.             <url>http://192.168.0.101:8080/kie-drools/maven2/</url>  
  15.         </repository>  
  16.     </repositories>  
  17.     <dependencies>  
  18.         <!-- drools -->  
  19.         <dependency>  
  20.             <groupId>org.kie</groupId>  
  21.             <artifactId>kie-api</artifactId>  
  22.             <version>${drools.version}</version>  
  23.         </dependency>  
  24.         <dependency>  
  25.             <groupId>org.drools</groupId>  
  26.             <artifactId>drools-core</artifactId>  
  27.             <version>${drools.version}</version>  
  28.         </dependency>  
  29.         <dependency>  
  30.             <groupId>org.drools</groupId>  
  31.             <artifactId>drools-compiler</artifactId>  
  32.             <version>${drools.version}</version>  
  33.         </dependency>  
  34.         <dependency>  
  35.             <groupId>org.drools</groupId>  
  36.             <artifactId>drools-decisiontables</artifactId>  
  37.             <version>${drools.version}</version>  
  38.         </dependency>  
  39.         <dependency>  
  40.             <groupId>org.drools</groupId>  
  41.             <artifactId>drools-templates</artifactId>  
  42.             <version>${drools.version}</version>  
  43.         </dependency>  
  44.         <dependency>  
  45.             <groupId>org.kie</groupId>  
  46.             <artifactId>kie-ci</artifactId>  
  47.             <version>${drools.version}</version>  
  48.         </dependency>  
  49.         <!-- test -->  
  50.         <dependency>  
  51.             <groupId>junit</groupId>  
  52.             <artifactId>junit</artifactId>  
  53.             <version>4.7</version>  
  54.             <scope>test</scope>  
  55.         </dependency>  
  56.     </dependencies>  
  57.   
  58. </project>  


POM.XML解释

关键在于下面这两段:



Java程序通过远程地址读取kie-drools仓库内的规则用的就是这个包。

第二步: 工程结构


保持和远程KIE-DROOLS上的package名字一样



PaymentInfo.java文件

你可以直接把kie-drools内的data object里的这个Facts代码存到你本地来



编写远程调用客户端


  1. package org.sky.drools.approvaldecision;  
  2.   
  3. import java.io.InputStream;  
  4.   
  5. import org.drools.compiler.kproject.ReleaseIdImpl;  
  6. import org.drools.core.io.impl.UrlResource;  
  7. import org.kie.api.KieServices;  
  8. import org.kie.api.builder.KieModule;  
  9. import org.kie.api.builder.KieRepository;  
  10. import org.kie.api.runtime.KieContainer;  
  11. import org.kie.api.runtime.StatelessKieSession;  
  12.   
  13. public class RemotePaymentRulz {  
  14.   
  15. public static void main(String[] args) throws Exception {  
  16.     String url = "http://192.168.0.101:8080/kie-drools/maven2/org/sky/drools/ApprovalDecision/1.0.0/ApprovalDecision-1.0.0.jar";  
  17.     ReleaseIdImpl releaseId = new ReleaseIdImpl("org.sky。drools""ApprovalDecision""LATEST");  
  18.     KieServices ks = KieServices.Factory.get();  
  19.     KieRepository kr = ks.getRepository();  
  20.     UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url);  
  21.     urlResource.setUsername("tomcat");  
  22.     urlResource.setPassword("tomcat");  
  23.     urlResource.setBasicAuthentication("enabled");  
  24.     InputStream is = urlResource.getInputStream();  
  25.     KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is));  
  26.     KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());  
  27.     StatelessKieSession kSession = kContainer.newStatelessKieSession("defaultStatelessKieSession");  
  28.     PaymentInfo m = new PaymentInfo();  
  29.     m.setMoneyAmount(5001);  
  30.     kSession.execute(m);  
  31.     System.out.println(m.getDecisionPath());  
  32.     if (m.getDecisionPath().equalsIgnoreCase("m")) {  
  33.     System.out.println("数额<=5000需要经理审批");  
  34.     } else {  
  35.     System.out.println("数额>5000需要总经理审批");  
  36.     }  
  37. }  
  38. }  

远程客户端核心代码解释


  1. String url = "http://192.168.0.101:8080/kie-drools/maven2/org/sky/drools/ApprovalDecision/1.0.0/ApprovalDecision-1.0.0.jar";  
  2. KieServices ks = KieServices.Factory.get();  
  3. KieRepository kr = ks.getRepository();  
  4. UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url);  

以上代码很简单,它告诉JAVA,需要上哪儿去调用我们位于远程布署的规则

  1. urlResource.setUsername("tomcat");  
  2. urlResource.setPassword("tomcat");  
  3. urlResource.setBasicAuthentication("enabled");  
  4. InputStream is = urlResource.getInputStream();  
  5. KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is));  
  6. KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());  

以上代码做的事情就是相当于在IE中打开KIE-DROOLS的Web地址,然后输入用户名、密码并点击登录

  1. StatelessKieSession kSession = kContainer.newStatelessKieSession("defaultStatelessKieSession");  
  2.   
  3. PaymentInfo m = new PaymentInfo();  
  4. m.setMoneyAmount(5001);  
  5. kSession.execute(m);  
  6. System.out.println(m.getDecisionPath());  
  7. if (m.getDecisionPath().equalsIgnoreCase("m")) {  
  8. System.out.println("数额<=5000需要经理审批");  
  9. else {  
  10. System.out.println("数额>5000需要总经理审批");  
  11. }  

这段代码用的就是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的访问方式。

Drools6 入门学习(一)——Drools6新特性

其实Drools6有挺多优秀的入门学习资料了,按理说没必要在重复别人的内容了。不过由于项目的需要,需要对Drools有个透彻的了解甚至说现有的中文资料都没法支持我把需求做出来,所以还是把基础打扎实把。...
  • luzhenyu111
  • luzhenyu111
  • 2015年03月01日 17:58
  • 16369

Drools 6.0入门:时钟实例

关于Drools 6.0的博文,写了很长时间。一方面是最近比较散漫,虽然也学了不点击打开链接少新的东西,但是不太愿意记录下来;另一方面是Drools本身比较繁琐,即便是入门也需要涉及很多内部的东西,越...
  • sadfishsc
  • sadfishsc
  • 2014年04月11日 17:04
  • 25108

Drools KIE API

在搭建Drools开发环境中我们接触了几个Drools的API,例如: KieServices KieContainer KieSession 还有kmodule....
  • qq1010885678
  • qq1010885678
  • 2016年03月29日 17:04
  • 5413

KieSession缓存调用

import java.util.List; import org.drools.core.event.DebugRuleRuntimeEventListener; import org.kie.a...
  • u013491262
  • u013491262
  • 2017年11月22日 10:25
  • 91

drools用户指南----stateless session(无状态会话)的使用

stateless session 无状态会话Drools规则引擎中有如此多的用例和诸多功能,它变得令人难以置信。不过不用担心,复杂性是分层的,你可以用简单的用例来逐步了解drools。无状态会话,不...
  • u013815546
  • u013815546
  • 2017年04月11日 12:51
  • 1340

jboss规则引擎KIE Drools 6.3.0-高级讲授篇

国内唯一一篇全流程讲述生产环境中的JBOSS DROOLS是如何使用的教程,该教程弥补了官方教程灵碎、版本过于陈旧、API函数部分已经被废弃的一系列问题。因此这也是对JBOSS官方QUICK STAR...
  • lifetragedy
  • lifetragedy
  • 2017年03月07日 14:47
  • 7524

jboss规则引擎KIE Drools 6.3.0 Final 教程(2)

世面上成熟的规则引擎有很多,著名的如:IBM 的iLog,pegga rulz(飞马),我们在这边要介绍的也是开源中最著名的jboss rulz。 Jboss Rulz最早是只有基于.drools的规...
  • lifetragedy
  • lifetragedy
  • 2016年04月14日 09:39
  • 18663

初始规则引擎Drools

规则引擎Drools 6.x来实现规则引擎KieSession的创建
  • chen_lian
  • chen_lian
  • 2016年06月02日 17:09
  • 1820

drools用户指南----stateful session(有状态会话)的使用

stateful session 有状态会话有状态会话长期存在,并允许随着时间的推移进行迭代更改。 有状态会话的一些常见用例包括但不限于: 1. 监测 半自动买入股票市场监控与分析。 2. 诊断...
  • u013815546
  • u013815546
  • 2017年04月11日 12:37
  • 799

27、Workbench项目添加kbase,kiesession功能

在讲述依赖关系时,我们引入了,在workbench中如何设置kiesession等功能,这里我们就详细的说明一下: 首先,这个kieserver还有知识库,我们应该在哪修改呢。很简单,打开项目编辑器:...
  • u013115157
  • u013115157
  • 2016年08月19日 09:38
  • 809
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jboss规则引擎KIE Drools 6.3.0 Final 教程(2)
举报原因:
原因补充:

(最多只允许输入30个字)