Drools8.44.0官方文档翻译(二):远程库安装和Decision Service的使用教程(上)

文章来源: Getting Started: Drools Document
本文简介:本文翻译自Drools 8.44.0.Final版本的官方文档。本文介绍了如何使用Drools,包括如何配置安装环境、如何从远程库安装Drools8、DMN组件的信息、选择部署平台的指南等相关教程
翻译初衷:由于国内缺乏Drools (尤其是8.x版本) 相关资料,没有一条龙式的安装指南,且8.x版本同7.x版本的官方文档有较大差异,因此译者认为对8.x版本的官网文档进行翻译和完善是有必要的

第一个规则项目

安装环境配置

下述JDK和Maven的安装和配置详见:《Drools8.44.0官方文档翻译(一):介绍与源码安装教程》中【从源代码安装Drools】一节的前两步骤

  • 正确配置了JAVA_HOME参数的JDK11+
  • Apache Maven 3.8.6+(建议使用最新版本)
  • (可选)安装IDE,如IntelliJ IDEA、VSCode或Eclipse

使用Maven Archetype创建一个新项目

使用下述代码创建一个新项目(Drools8.44.0.Final版本)

mvn archetype:generate -DarchetypeGroupId=org.kie -DarchetypeArtifactId=kie-drools-exec-model-ruleunit-archetype -DarchetypeVersion=8.44.0.Final

在命令执行过程中,以交互方式输入特性值(如下图所示):

Define value for property 'groupId': org.example
Define value for property 'artifactId': my-project
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' org.example: :
...
 Y: : Y
...
[INFO] BUILD SUCCESS

之后Drools8.44.0.Final就会被自动安装。安装成功后可以在安装目录下的my-project文件夹中看到src文件夹和pom.xml文件(如下图所示)

现在,您的第一个规则项目已经创建。让我们看看这个项目。首先是`pom.xml`。以下这是规则单元用例所必需的依赖项。
  <dependencies>

    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-ruleunits-engine</artifactId>
    </dependency>
	...
  </dependencies>

注:您仍然可以使用传统的Drools 7样式规则,而不使用规则单元。在本例中,使用kie-drools-exec-model-archetype。

在通过archetype安装的Drools文件中包含一个DRL文件作为示例src/main/resources/org/example/rules. drl(如下所示):

package org.example;

unit MeasurementUnit;

rule "will execute per each Measurement having ID color"
when
	/measurements[ id == "color", $colorVal : val ]
then
	controlSet.add($colorVal);
end

query FindColor
    $m: /measurements[ id == "color" ]
end

此规则检查传入的Measurement数据,当其为颜色信息时,将其值存储在全局变量controlSet中。
when部分实现模式匹配时,then部分定义的操作会被执行。
接下来,找到在规则中定义了unit MeasurementUnitsrc/main/java/org/example/MeasurementUnit.java文件(一个rule unit文件)。该文件分组定义了数据源、全局变量和DRL规则(如下所示):

public class MeasurementUnit implements RuleUnitData {

    private final DataStore<Measurement> measurements;
    private final Set<String> controlSet = new HashSet<>();

    ...

rules.drl中的/measurements绑定到MeasurementUnit类中的measurements字段,由此也就可以知道rules.drl中的/measurements的数据类型是Measurement。这个类还定义了一个全局变量controlSet
然后,src/main/java/org/example/Measurement.java是规则中使用的Java bean类。这样的对象被称为事实(Fact)。
最后,src/test/java/org/example/RuleTest.java是执行规则的测试用例。在这里,您可以了解在您自己的应用程序中使用的基本API的用法。

        MeasurementUnit measurementUnit = new MeasurementUnit();

        RuleUnitInstance<MeasurementUnit> instance = RuleUnitProvider.get().createRuleUnitInstance(measurementUnit);

如上,创建MeasurementUnit实例。然后使用RuleUnitProvider创建一个带有MeasurementUnit实例的RuleUnitInstance

        measurementUnit.getMeasurements().add(new Measurement("color", "red"));
        measurementUnit.getMeasurements().add(new Measurement("color", "green"));
        measurementUnit.getMeasurements().add(new Measurement("color", "blue"));

如上,将Measurement事实添加到measurementUnit.measurements中。这意味着事实数据将被插入Drools规则引擎。

        List<Measurement> queryResult = instance.executeQuery("FindColor").stream().map(tuple -> (Measurement) tuple.get("$m")).collect(toList());

如上,执行名为FindColor的查询。执行查询时,将自动触发与插入的事实匹配的规则。如果你只想触发规则而不想查询,你可以调用instance.fire()

        instance.close();

最后,调用close()以释放RuleUnitInstance保留的资源。
让我们使用mvn clean test运行测试。

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.example.RuleTest
2022-06-13 12:49:56,499 [main] INFO  Creating RuleUnit
2022-06-13 12:49:56,696 [main] INFO  Insert data
2022-06-13 12:49:56,700 [main] INFO  Run query. Rules are also fired
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.411 s - in org.example.RuleTest

现在您可以在这个项目中添加自己的规则和事实!

注:规则项目需要由mvn编译阶段触发的代码生成。如果直接在IDE中运行RuleTest.java,则可能需要先运行mvn compile。

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值