ilog 本地执行规则

作者: 卑微幻想家 | 来源:发表于2018-04-10 08:52 被阅读9次

前言

由于我们公司用到ilog规则引擎,于是记录一下如何在本地执行规则集.方便以后自己查找.

新建规则项目以及XOM项目

这两个项目是我写的一个小例子,用于演示一些基本操作.
项目结果如下:

项目结构

新建规则

如果
'保单' 的被保险人 的年龄 小于 20
那么
'返回结果' . 添加返回结果( "被保险人年龄控制",不成立 ,"被保险人年龄小于20") ; 
否则
'返回结果' . 添加返回结果( "被保险人年龄控制",成立 ,"被保险人年龄大于20") ; 

这是一个被保险人年龄的判断规则.

发布到res进行测试

在将本地测试之前,我先发布到res进行测试.看看项目有没有什么问题.

  • 新建RuleApp项目

    1. 右键规则项目 -> 新建 -> 其他


      第一步
    2. 选择RuleApp项目


      第二步
    3. 输入项目名称


      第三步
    4. 添加规则项目


      第四步
    5. 点击完成


      第五步
  • 将规则项目发布到res服务器

    1. 右键RuleApp项目 -> RuleApp -> 部署


      第一步
    2. 选择增量RuleApp主要版本


      第二步
    3. 输入res服务器的地址,用户名以及密码,点击完成


      第三步

    控制台看到如下结果表明已经成功部署上去了


    控制台
    1. 打开浏览器,访问res服务器,进入后点击资源管理器tab页,展开刚刚发布上去的项目,并点击规则集,然后点击右边的检索 HTDS 描述文件.

      第四步
    2. 选择REST,并点击测试


      第五步

    出现以下页面表示已经没问题了,如果进入这个页面报错,可能是你的项目有问题,再检查一下规则,以及规则流,jdk版本等是否符合规范.


    第六步
  • 测试
    点击执行请求,返回以下结果
    结果

可以看到我们的项目返回了正确的结果,说明没有问题.那么,接下来,我们尝试在本地执行我们的规则.

本地测试

  1. 新建本地测试项目


  2. 将XOM项目中的代码考到测试项目中


  1. 新建lib文件夹,导入相关jar包,并把jar包引入到构建路径中


  1. 将规则集导出


  1. 将导出后的jar包解压,复制其中的ruleset.jar到测试项目的lib下


6.新建test类,并键入一下代码进行测试

package test;

import ilog.rules.archive.IlrJarArchiveLoader;
import ilog.rules.engine.IlrContext;
import ilog.rules.engine.IlrParameterMap;
import ilog.rules.engine.IlrRuleset;
import ilog.rules.engine.IlrRulesetArchiveParser;

import java.io.FileInputStream;
import java.util.jar.JarInputStream;

import com.zhaojun.bom.AppApplicant;
import com.zhaojun.bom.AppInsured;
import com.zhaojun.bom.Policy;
import com.zhaojun.result.UnderwriteResults;

public class Test {

public static void main(String[] args) throws Exception {
    invokeIlrJar();
}

public static void invokeIlrJar() throws Exception {
    // This class is a parser of ruleset archives. The archive is given as a
    // stream. The parsing provides:
    // a ruleset.
    // a business reflect used in the case of a business ruleset archive.
    // an execution reflect, used to create the provided ruleset.

    IlrRulesetArchiveParser parser = new IlrRulesetArchiveParser();

    // Creates an archive loader which relies on a jar stream.
    IlrJarArchiveLoader ruleArchvieLoader = new IlrJarArchiveLoader(
            new JarInputStream(new FileInputStream(
                    "E:\\workspace\\odm\\ilogstudytest\\lib\\ruleset.jar")));
    // Parses the ruleset archive.
    parser.parseArchive(ruleArchvieLoader);
    // Get a ruleset issued from a ruleset archive parsing.
    IlrRuleset rtsRuleSet = parser.getRuleset();
    // IlrContext is the base class of all the execution contexts. Rules can
    // be executed only within an execution context.
    // In ILOG JRules, the rule engine is an instance of IlrContext, the
    // rule engine is simply a Java object.
    // An IlrContext instance is always attached to an IlrRuleset. If the
    // context is created without a ruleset passed as an argument, it
    // creates its own ruleset.
    // An IlrContext instance contains all the methods required to control
    // the rule engine. IlrRuleset is responsible for rule management,
    // IlrContext is responsible for rule execution.
    IlrContext context = new IlrContext();
    context.setRuleset(rtsRuleSet);
    // Implements a structure for storing parameter values to set or get
    // from ruleset variables. Each parameter is stored with its name and
    // its value.
    IlrParameterMap paramMap = new IlrParameterMap();

    Policy policy = new Policy();
    AppApplicant appApplicant = new AppApplicant();
    AppInsured appInsured = new AppInsured();
    appApplicant.setName("jack");
    appApplicant.setAge(18);
    appApplicant.setGender(false);
    policy.setAppApplicant(appApplicant);
    
    appInsured.setName("jack");
    appInsured.setAge(18);
    appInsured.setGender(true);
    policy.setAppInsured(appInsured);
    
    // Store for the parameter "name" and its value "value".
    paramMap.setParameter("policy", policy);
    // Sets the values of the declared ruleset variables contained in the
    // passed IlrParameterMap (defined either with the "in" or "inout"
    // modifier).
    context.setParameters(paramMap);
    // Executes the ruleflow defined in the context's ruleset.
    // Executes the task passed as the argument.
    // context.execute(taskName);
    context.execute();
    // Gets the value of the ruleset parameter.
    // Returns the values of the "out" ruleset variables (those defined
    // either with the "inout" or "out" modifier).
    // IlrParameterMap rpm = context.getReturnValues();
    Object r = context.getParameterValue("result");
     UnderwriteResults result =(UnderwriteResults)r;
     
     if(result != null && result.getUnderwriteList() != null){
         System.out.println(result.getUnderwriteList().get(0).getMessage());
     }

    // Disconnects all connected IlrTool.
    context.disconnectTools();
    // Called by Rule Studio to prepare a context for another execution.
    context.reset();
   }
}

7.运行测试类,见到以下输出结果.

 被保险人年龄小于20

本地执行规则的好处就是执行速度比较快,而且能够对代码进行断点调试,方便查找bug.


转载请注明原创地址。

参考博文:
Java调用ILOG两种形式备忘

相关文章

  • ilog 本地执行规则

    前言 由于我们公司用到ilog规则引擎,于是记录一下如何在本地执行规则集.方便以后自己查找. 新建规则项目以及XO...

  • 追踪馆任务

    关于“调用总公司规则集异常”问题追踪过程说明 1.背景说明 日常工作中,车险业务相关ilog规则通常由车险部编写、...

  • Ilog-职场

  • 将服务器上的文件传输到本地

    nc -l4 端口 > 文件 // 本地执行nc 本地IP 本地端口 < 文件 // 服务器执行

  • 需要的连接

    ilog学习内容:灵魂盗猎者 石星博客 manman博客 weblogic安装:weblogic安装

  • windows的git上传github

    1.建立git本地仓 库 打开本地git工具 执行命令:git init 创建本地仓库: 执行命令 :git ad...

  • MAVEN - 删除maven 下载失败的文件

    linux下cd到maven本地仓库目录,执行: window下cd到maven本地仓库目录,执行:

  • git强制覆盖本地命令

    git强制覆盖本地命令(分步执行): git强制覆盖本地命令(单条执行):git fetch --all && g...

  • 规则的执行。

    通过各种的学习,很多父母都知道了要与孩子一起制定规则,尤其是关于学习的规则。 制定一个好的规则并不容易。因为他们需...

  • iptables规则执行顺序

    iptables执行规则时,是从从规则表中从上至下顺序执行的,如果没遇到匹配的 规则,就一条一条往下执行,如果遇到...

网友评论

    本文标题:ilog 本地执行规则

    本文链接:https://www.haomeiwen.com/subject/ezcghftx.html