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

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

时间: 2024-07-30 20:31:47

jboss规则引擎KIE Drools 6.3.0 Final 教程(2)的相关文章

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

前言 目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本的JBOSS Guvnor即5.x的一些教程,而且这些教程都是"缺胳膊少腿"的,初学者看后不知道它到底在干吗?能干吗?能够解决自己系统中什么问题. 所以笔者自己写了几个例子,把整个最新的英文版的KIE DROOLS 6.3.0.Final的官方教程给串了起来,用于供读者使用并以此来作为入门以及相关SOA理念的推广的第一

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

在前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

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

在生产环境怎么用BRMS 回溯BRMS开发教程中的那张"业务变现加速器"架构图,考虑下面的问题 业务开发人员开发规则 IT人员提供FACT 关键在于"全动态" SQL语句改了怎么办?不重启 DAO层改了怎么办?不重启 Mybatis的配置文件改了怎么办?不重启 按照上次的<jboss规则引擎KIE Drools 6.3.0 Final 教程>,一起来看一个实际的场景 如何熊掌与鱼兼得? 做到以下几点是否就可以"全得"? 规则更改不重启

JAVA规则引擎 -- Drools

Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效. 本文所使用的demo已上传 http://download.csdn.net/source/3002213 1.Drools语法 开始语法之前首先要了解一下drools的基本工作过程,通常而言我们使用一个接口来做事情,首先要穿进去参数,其次要获取到接口的实现执行完毕后的结果,而drools也是一样的,我们需要传递进

eclipse下搭建Drools规则引擎环境

插件下载地址:http://download.jboss.org/drools/release/ 1.点开对应的版本文件,选择标红的两个压缩包下载,其他的如有需要也可以自行选择: 2.将下载的压缩包解压,这边放到了E:\tools\drools目录下,打开eclipse,Help->Install New SoftWare->add,选择 E:/tools/drools/droolsjbpm-tools-distribution-5.6.0.Final/binaries/org.drools.

规则引擎选型及简单应用

规则引擎实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.规则引擎具体执行可以分为接受数据输入,解释业务规则,根据业务规则做出业务决策几个过程,使用规则引擎可以把复杂.冗余的业务规则同整个支撑系统分离开,做到架构的可复用移植. 规则引擎的选型应用 相对于业务系统,规则引擎可以认为是一个独立于业务系统的模块,负责一些规则的计算等.一般来说,规则引擎主要应用在下面的场景中: 风控模型配置,风控是规则引擎 用户积分等配置,如日常操作引起积分变化等 简单的离线计算,各类数据量

开源业务规则引擎JBoss Drools

Drools 是什么? 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务规则做出业务决策. http://www.tuicool.com/articles/3EFNV3M

【java规则引擎】drools6.5.0版本中kmodule.xml解析

kmodule.xml文件存放在src/main/resources/META-INF/文件夹下. 1 <?xml version="1.0" encoding="UTF-8"?> 2 <kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule"> 3 <kbase name="rules" packages="rules"> 4

Spring Boot+Drools规则引擎整合

目的 官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少. 本文介绍如何在Spring Boot项目上加上Drools规则引擎. POM依赖 POM文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=&q