drools - 控制同一包中2个drools文件的执行顺序
问题描述
我在同一个包 com.sample.order.rules orders.drl 和 order-summary.drl 中有 2 个流口水文件。我想处理 orders.drl 中的所有订单,然后从 order.drl 处理的结果中,使用 order-summary.drl 创建一个订单摘要。我目前通过将 order-summary.drl 中的所有显着性设置为 -1 来控制执行顺序。有没有可能以其他方式解决这个问题?问题是规则的数量正在增加,并且为 order-summary.drl 中的每条规则添加显着性只是感觉不对。
解决方案
可以使用属性控制规则组的执行顺序,请参阅文档ruleflow-group
中的示例。一般来说,方法是:
- 用
ruleflow-group
属性标记您的相关规则。 - 创建 BPMN 流(业务流程)
- 将您的每个
ruleflow-group
s 与一个业务流程任务相关联 - 在 jBPM 流程下触发您的规则
这允许您(可选地)仅在满足上一个订单步骤中的某些条件时触发您的汇总步骤。我建议查看 Drools Business Central Showcase Docker image提供的 Mortgage_Process 示例。要设置 KIE 执行服务器 API 以迭代地测试您的规则和流程,请参阅此处的 docker-compose 设置。
第1步
rule "order rule 1"
ruleflow-group "orders"
when
Order ( value > 10 )
then
insert ( new Shipment () );
end
rule "summary rule 1"
ruleflow-group "summary"
when
Shipment ()
then
// do stuff
end
推荐阅读
- java - 当我尝试在 Eclispe 中向项目添加外部 jar 时发生“启动层初始化期间发生错误”
- batch-file - 批处理文件可以运行它所在文件夹中的所有内容吗?
- java - 如何修复我的代码中的“com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表'food.c'不存在”错误
- ansible - 用 with_items 注册的 Ansible 变量,如何使用这个变量?
- openshift - 如何获取 pod 运行的 openshift 节点?
- c# - 如何将 DataTable1.Row[i][j] 中的字符串值读取到 DataTable2 的数组或多行中
- sql - 失败:ParseException 行 1:21 无法识别 ' 附近的输入
'' '' ' 在表名中 - android - Android Studio Kotlin 如何打印字符串以及它们出现在哪里
- python - 在 Python 中从 CSV 中删除列
- javascript - 在 Flask 应用程序中更新键值对时出现“线程异常”错误