zoukankan      html  css  js  c++  java
  • 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的访问方式。


  • 相关阅读:
    定时器准确定时八位时钟
    数码管八位显示时钟
    串口通讯
    定时器/计数器0(定时器)
    定时器/计数器0之计数器
    定时器/计数器0(计数器)
    外部中断0
    LCD带字符液晶显示I LOVE YOU
    Altium Designer Summer 09换成中文步骤
    BAT小米奇虎美团迅雷携程等等各大企业校招,笔试面试题。
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154601.html
Copyright © 2011-2022 走看看