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

简介: 使用JAVA程序调用规则-运行KIE-DROOLS上的规则第一步:建立一个MAVEN的Java工程POM.XML给出pom.

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




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




POM.XML


给出pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>os.nut.drools</groupId>
	<artifactId>drools-training</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<properties>
		<drools.version>6.3.0.Final</drools.version>
	</properties>
	<repositories>
		<repository>
			<id>guvnor-m2-repo</id>
			<name>Guvnor M2 Repo</name>
			<url>http://192.168.0.101:8080/kie-drools/maven2/</url>
		</repository>
	</repositories>
	<dependencies>
		<!-- drools -->
		<dependency>
			<groupId>org.kie</groupId>
			<artifactId>kie-api</artifactId>
			<version>${drools.version}</version>
		</dependency>
		<dependency>
			<groupId>org.drools</groupId>
			<artifactId>drools-core</artifactId>
			<version>${drools.version}</version>
		</dependency>
		<dependency>
			<groupId>org.drools</groupId>
			<artifactId>drools-compiler</artifactId>
			<version>${drools.version}</version>
		</dependency>
		<dependency>
			<groupId>org.drools</groupId>
			<artifactId>drools-decisiontables</artifactId>
			<version>${drools.version}</version>
		</dependency>
		<dependency>
			<groupId>org.drools</groupId>
			<artifactId>drools-templates</artifactId>
			<version>${drools.version}</version>
		</dependency>
		<dependency>
			<groupId>org.kie</groupId>
			<artifactId>kie-ci</artifactId>
			<version>${drools.version}</version>
		</dependency>
		<!-- test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

</project>


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的访问方式。


目录
相关文章
|
Java 应用服务中间件 数据库连接
jboss规则引擎KIE Drools 6.3.0-集群篇
DROOLS集群的原理 Drools集群是架设在jboss集群之上的 Drools集群其实是WorkBench(WB)间的集群 KIE SERVER是JSON服务,它是架设在WB上的,一个WB可以挂1个、多个KIE SERVER WB除了...
3562 0
|
Java 数据库连接 应用服务中间件
jboss规则引擎KIE Drools 6.3.0-高级讲授篇
在生产环境怎么用BRMS 回溯BRMS开发教程中的那张“业务变现加速器”架构图,考虑下面的问题 业务开发人员开发规则 IT人员提供FACT 关键在于“全动态” SQL语句改了怎么办?不重启 DAO层改了怎么办?不重启 Mybatis的配置文件改了怎么办?不重启 按照上次的《jboss规则引擎KIE Drools 6.
2896 0
|
应用服务中间件
jboss规则引擎KIE Drools 6.3.0 Final 教程(3)
在前2部教程中,介绍了如何在本地运行.drools文件以及使用stateless的方法访问远程repository上的规则。 KIE Drools还提供了一种叫有状态-stateful的访问方式。
1337 0
|
关系型数据库 Java MySQL
jboss规则引擎KIE Drools 6.3.0 Final 教程(1)
前言 目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本的JBOSS Guvnor即5.x的一些教程,而且这些教程都是”缺胳膊少腿“的,初学者看后不知道它到底在干吗?能干吗?能够解决自己系统中什么问题。
2528 0
|
应用服务中间件 Java
把Drools 5.4集成到JBoss AS 7.1.1
Drools5引入了业务逻辑集成平台,它提供了支持规则、工作流和事件处理的统一、集成的平台。一切都是重新设计。Drools 5可以分成4个主要的子项目:Guvnor(BRMS/BPMS)、Expert(规则引擎)、Flow(处理/工作流)、Fusion(cep/temporal reasoning)。
909 0
|
应用服务中间件 Java
把Drools 5.4集成到JBoss AS 7.1.1
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/8167836 把Drools 5.4集成到JBoss AS 7.1.1作者:chszs,转载需注明。
802 0