如何使用 JSR94 通过 Drools 加载基于 Excel 的决策表?

2024-03-12

网上有很多关于如何加载 Drools DRL 规则集的示例。但是,我似乎找不到任何有关如何使用 JSR94 API 加载 Excel 格式的决策表的说明或示例。

有谁知道如何做到这一点?如果是的话,您能提供一个简单的代码示例吗?

下面是我正在使用的一段示例代码。我已经标记了我怀疑某些属性需要设置并作为第二个参数传递给 createRuleExectuionSet() 的区域(尽管这可能不是解决方案)。

package com.sample;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.rules.RuleRuntime;
import javax.rules.RuleServiceProvider;
import javax.rules.RuleServiceProviderManager;
import javax.rules.StatelessRuleSession;
import javax.rules.admin.LocalRuleExecutionSetProvider;
import javax.rules.admin.RuleAdministrator;
import javax.rules.admin.RuleExecutionSet;

import org.drools.jsr94.rules.RuleServiceProviderImpl;

/**
 * This is a sample class to launch a decision table.
 */
public class DecisionTableTestJsr94 {

    // URL to the Decision Table file (via the classpath)
    private static final String DECISION_TABLE_PATH = "/rules/Sample.xls";

    // An arbitrary URI to identify the rule set
    private static final String BIND_URI = "uri://fake/bind/uri";

    public DecisionTableTestJsr94() throws Exception{
        // Initialize the needed services
        RuleServiceProviderManager.registerRuleServiceProvider(RuleServiceProviderImpl.RULE_SERVICE_PROVIDER, RuleServiceProviderImpl.class);
        RuleServiceProvider ruleServiceProvider = RuleServiceProviderManager.getRuleServiceProvider(RuleServiceProviderImpl.RULE_SERVICE_PROVIDER);
        RuleAdministrator ruleAdmin = ruleServiceProvider.getRuleAdministrator();
        LocalRuleExecutionSetProvider ruleExecutionSetProvider = ruleAdmin.getLocalRuleExecutionSetProvider(null);

        // Read the decision table
        InputStream rules = this.getClass().getResourceAsStream(DECISION_TABLE_PATH);
        Map ruleProperties = new HashMap();

        // ** (probably something needs to happen hear with a properties Map, but what? **

        RuleExecutionSet ruleExecutionSet = ruleExecutionSetProvider.createRuleExecutionSet(rules, null);

        // Add the rules
        ruleAdmin.registerRuleExecutionSet(BIND_URI, ruleExecutionSet, null);

        // Start the rule session
        StatelessRuleSession ruleSession = null;
        ruleSession = (StatelessRuleSession) ruleServiceProvider.getRuleRuntime().createRuleSession(BIND_URI, null, RuleRuntime.STATELESS_SESSION_TYPE);

        // Create a domain object for the test
        Message message = new Message();
        message.setStatus(Message.HELLO);
        System.out.println("Message is: '" + message.getMessage() + "'"); // should be null

        // Run the object through the rules
        List<Message> inputList = new ArrayList<Message>();
        inputList.add(message);
        ruleSession.executeRules(inputList);

        // See if the rules modified the object
        System.out.println("Message is: '" + message.getMessage() + "'"); // should have the appropriate message
    }

    public static final void main(String[] args) throws Exception {
        new DecisionTableTestJsr94();
    }
}

我认为 JSR-94 提供程序尚未提供决策表实现 - 您需要使用决策表 API 将 XLS 转换为 drl 格式,然后您可以将其传递给上面的代码。

因此,如果您使用 SpreadsheetCompiler(org.drools.decisiontables 包)可以为您做到这一点 - 不幸的是,这意味着您必须导入 drools 类(不是纯 JSR-94),这样可能会达不到目的。

无论如何,JSR-94 api 非常有用的情况很少——它没有作为 API 规范发展是有原因的。可以说,与使用 JSR-94 相比,您可以用更少的代码行来实现一些主要规则引擎的“存根”(我已经做到了!)。

它对我有用的一次是当我编写一个适用于 JRules 和 Drools 的测试工具时(在这种情况下它很有用,因为我只处理数据 - 而不是规则本身 - 在上面的代码中 - JSR - 94 不同规则引擎的“可插入性”是没有用的——如果你要切换到其他引擎,你的规则无论如何都必须重写)。

祝你好运 !

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JSR94 通过 Drools 加载基于 Excel 的决策表? 的相关文章

  • 规则引擎Drools使用 第一篇 规则引擎认知

    规则引擎有什么用呢 可以在那些实际场景使用呢 思考这样一个问题 申请信用卡 每个人去申请信用卡的时候 都会经过一遍核查 这个核查过程其实就可以当做是根据规则 去校验你的信息是否符合规则 只有符合规则的才可以申请信用卡 还记得以前自己写的那些
  • newKieSession 是线程安全的吗?

    我们在项目中使用了 Drools kieSessions 许多线程可以创建新的 kieSession 有时线程在创建会话时可能会挂起 因此问题是 Firstly kieContainer newKieSession 是线程安全的操作吗 被绞
  • 为什么我们在“==”比较中指定变量的顺序很重要?

    我注意到 仅更改与 运算符进行比较的变量的顺序就会产生很大的性能差异 例如 variable variable 比variable variable 慢得多 为什么会这样 有类似的案例吗 顺便说一下 我使用的是从 GitHub 下载的 Op
  • 流口水性能测试

    目前 我们正在寻求在系统中使用 drools 来管理知识密集型流程 据我所知 有关流口水的性能测试的信息和结果很少且很难找到 虽然用例差异很大 但最好了解常见的瓶颈 例如 插入就是其中之一 以及在某些场景下绕过这些瓶颈的可能的最佳实践 此外
  • 流口水基于时间的限制和“现在”

    我们正在尝试写一个流口水 上面写着 如果事件发生在上周 则执行后果 我们有表示事件发生时间的常规 java 日期对象 但我们不确定如何在流口水的 LHS 中表达我们希望该日期对象在上周发生 重要的是 一周的时间跨度是任意的 它可以随时更改为
  • 方言错误消息流口水

    我已经在 Tomcat 7 中部署了一个 webApp 我正在使用 Drools 现在 当我连续运行时 Drools 会抛出运行时异常 我也在类路径中添加了 core 3 4 2 v 883 R34x jar 请查找错误日志 Some er
  • Drools 6.4 KieScanner:如何在 Maven 中创建和添加带有规则的 Jar?

    我是 Drools 和 Maven 的初学者 我面临着使用 KieScanner 加载规则的问题 该项目的目标是能够在永久 KieSession 中动态加载规则 我想知道是否可以使用 KieFileSystem 管理规则 不确定是否可以在不
  • 在运行时动态更新规则。流口水+弹簧靴

    所以目前我正在练习将 Drools 7 13 0 Final 与 Spring boot 1 5 12 RELEASE 一起使用 我用以下类在 Spring boot 中制作了一个示例应用程序 模型 TaxiFare java Data p
  • 用弹簧配置流口水。 xsd 错误

    我正在尝试使用 Drools 创建 spring roo 应用程序 但我在 applicationContext xml 中遇到了错误 Error 在这一行找到多个注释 无法找到模式命名空间 http drools org schema 的
  • 了解议程组的锁定活动

    我尝试了一个示例来了解锁定活动的工作原理 当我在不使用议程组的情况下触发规则时 一切似乎都很好 但是 当我取消注释下面代码中的议程组并将焦点设置为组 B 组 时 不会触发任何规则 Rule rule Additional Rs 1 tax
  • 流口水中的更新功能如何工作?

    流口水中的更新功能如何工作 它是否会导致相同的规则自动再次触发 我认为你需要阅读手册 http docs jboss org drools release 5 4 0 Final drools expert docs html single
  • Drools:在数据库中存储规则

    目前 我将所有规则文件存储在文件系统上 它们有很多版本 并在启动时将它们的不同版本加载到内存中 我想更改为将我的 drools 文件存储在数据库中 并且想知道 Drools 是否有任何解决方案或插件可以促进这一点 或者我应该自己制作 Tha
  • Drools - 规则层次结构和条件执行

    我想知道是否有一种方法可以定义规则之间的层次结构 而不 仅仅是执行顺序 并控制规则执行 即如果父规则被触发 则不应评估下面的规则等 该线程中的信息是一个选项 但本质上是 IF THEN ELSE https stackoverflow co
  • 使用 Drools Workbench 和 KIE 服务器的 HelloWorld

    将 KIE Drools Workbench 6 2 0 Final 安装在 JBoss 7 Application Server 本地实例中 将 Kie Server 6 2 0 Final 安装在本地 Tomcat 7 实例中 严格使用
  • 错误的类格式将包从 Java 7 构建到 Java 8

    我安装了两套 Guvnor 5 6 0 Final 一套 机器 A 在 Java 7 上运行 第二套 机器 B 在 Java 8 上运行 我从机器 A 导出了存储库并导入到机器 B 中 每次我执行构建包时 我都会有这个堆栈跟踪 Sep 29
  • 规则引擎Drools的入门使用

    pom 依赖
  • Drools 知识库 已弃用

    我正在将 Drools 规则引擎集成到我的应用程序中 我发现的 99 的入门示例如下 KnowledgeBuilder kbuilder KnowledgeBuilderFactory newKnowledgeBuilder kbuilde
  • Java规则引擎的优缺点[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 采用 Java 规则引擎的优点和缺点是什么JESS http www jessrules com and Drools http www jbo
  • 如何从 Drools 列表中获取最大最小项目

    我有课 class Person public Date dateOfBirth public List
  • PackageBuilder.java 在 Drools 6.1.0.final 中不可用

    我是 drools 的新手 目前我们在项目中使用 Drools 5 4 0 目前我们使用Drools 5 4 0的RuleCompiler java和PackageBuilder java类来编译 xls文件并创建ruleSetObject

随机推荐

  • 使用 RX Java 获取过滤器索引或第一个的优雅方法

    我正在练习 RX Java 想要获取与过滤器匹配的项目在数组中的位置 我看不到任何明显的方法来做到这一点 我正在考虑压缩范围和可迭代可观察之类的东西 但它很快就变得比 for 循环更加冗长和复杂 过去有mapWithIndex and zi
  • 将 Firebase DB 与本地数据库结合使用

    在我的应用程序中我有SQLite db 我想在用户的设备之间引入同步 Firebase DB看起来是一个可以接受的解决方案 但是Firebase DB首先是云数据库 因此 如果用户拒绝身份验证对话框并让他使用应用程序 但没有云同步 我无法将
  • iOS 通过溢出滚动禁用页面滚动:触摸

    假设我们希望通过 添加到主屏幕 使网络应用程序感觉像本机应用程序 第一步是禁用默认滚动 容易 对吧 window or document window addEventListener touchmove function event no
  • 如何选择具有多个类的跨度并将其放置在锚点内?

    我所处的情况是 我需要根据应用于它的类将单击事件绑定到跨度 放置在具有多个类的锚点内 For eg 更新 添加了下面的 html 例如 div class c0 c a class c1 c2 span class c3 c4 span A
  • Supervisor 节点 .js“程序节点应用程序已退出,代码为 0”错误

    当我安装快速脚手架应用程序时 express 然后运行npm安装 npm install 然后运行主管 supervisor app I get Starting child process with node app Program no
  • 从数据库模式创建 Web 表单

    我想知道是否有任何应用程序 最好是免费软件 可以进行数据库配置 并且尽可能轻松地创建用于轻松插入数据的 Web 表单 我发现很难准确表达我所追求的是什么 也许我可以谈谈我需要什么 我有一个配置数据库 至少通常包含有关我们系统中服务器的 真相
  • 如何在 jQuery 中解析 JSON 数组?

    EDIT我检查了 jQuery 文档 并使用 ajax 和指定的 json 数据类型返回一个评估的 javascript 对象 因此 eval 不是这里的答案 无论如何 我知道这一点 因为我能够解析单个 JSON 对象 但不能解析数组 问题
  • Capybara 问题:@request 必须是 ActionDispatch::Request

    我在让 Capybara 与 Rails 一起使用时遇到问题 只是测试那个所谓有趣的测试东西 好的 在所附的代码中有几个等效的测试 第一个是用Rails 自带的shoulda context Test Unit 制作的 第二个测试也是使用水
  • bitbucket - 无法确定主机“bitbucket.org”的真实性

    我在尝试推送到我的 bitbucket 存储库时遇到了这个问题 不确定为什么指纹不匹配 It asks me if I want to continue but I can t type anything in the dialog aft
  • 未为类型“DBNull”和类型“Integer”定义运算符“=”

    过去几个小时我一直在挣扎 但仍然无法解决这个问题 我遇到的问题是 当有人被承认数据库更新给他们 BedID 时 当我尝试释放他们时 我似乎无法将 BedID 在数据库中 设置为 Nothing 这是一个问题 因为我需要能够接纳和解雇尽可能多
  • 将 csv 数据集导入到 R 但值变成因子

    我对 R 非常陌生 在访问我导入的数据集时遇到问题 我正在使用 RStudio 并在导入 csv 文件时使用导入数据集功能 并将该行从控制台窗口粘贴到源窗口 代码如下 setwd c kalle R stuckey lt read csv
  • 未调用 DOMContentLoaded 或加载事件处理程序的异步加载脚本?

    我有一个脚本DOMContentLoaded事件处理程序 document addEventListener DOMContentLoaded function console log Hi 我正在异步加载 然而 事件处理程序从未被调用过
  • Java中的正则表达式问题

    我正在尝试为以下内容创建一个正则表达式replaceAllJava 中的方法 测试字符串是abXYabcXYZ模式是abc 我想将除图案之外的任何符号替换为 例如字符串abXYabcXYZ和图案 abc 应该返回 abc 但就我而言 它会返
  • 透明表单,其中包含可见的可点击控件

    我正在尝试在 win8 和 winforms 中制作一个鼠标透明表单 其中包含可单击的控件 我可以使用此代码使表单鼠标透明 int initialStyle GetWindowLong this Handle 20 SetWindowLon
  • 具有彩色高度的 3D 瀑布图

    我正在尝试使用 Python 和 Matplotlib 以 3D 方式可视化一个数据集 该数据集由 x z 数据的时间序列 沿 y 组成 我想创建一个像下面这样的图 这是用 Python 制作的 http austringer net wp
  • 将逗号分隔的字符串作为列表传递

    假设我有一个字符串 例如 x 1 y cat z NULL 我想获取代码创建的列表list x 1 z cat z NULL 这是我的第一次尝试 我知道这是horrible parse text lt function x parse te
  • 如何在 Java 中设置 LookAndFeel 文件?

    我需要在 JDK 1 6 中设置 LookAndFeel 文件 我有两个文件 餐巾拉夫 swingset2 jar 餐巾纸罐子 我该如何设置并使用它 我想要 GTK 外观或 Qt 外观 它们可用吗 本页介绍了如何使用外观和感觉 http j
  • Clang 在折叠表达式中找不到模板二元运算符

    这是我连接元组的二元运算符 template
  • HTML5 视频无法在 IE 11 中运行

    我有一个视频存档 可以在除 IE 11 之外的所有版本中使用 在 IE 11 中加载时 我收到错误 错误 不支持的视频类型或无效文件路径 下面是我正在使用的 HTML
  • 如何使用 JSR94 通过 Drools 加载基于 Excel 的决策表?

    网上有很多关于如何加载 Drools DRL 规则集的示例 但是 我似乎找不到任何有关如何使用 JSR94 API 加载 Excel 格式的决策表的说明或示例 有谁知道如何做到这一点 如果是的话 您能提供一个简单的代码示例吗 下面是我正在使