16.6. DRL 中的全局变量


DRL 文件中的全局变量通常会为规则提供数据或服务,如规则后果中使用的应用程序服务,并返回规则中的数据,如规则中添加的日志或值等。您可以通过 KIE 会话配置或 REST 操作在决策引擎的工作内存中设置全局值,声明 DRL 文件中的规则以外的全局变量,然后在规则的操作(然后)部分使用。对于多个全局变量,请在 DRL 文件中使用单独的行。

以下示例演示了决策引擎的全局变量列表配置以及 DRL 文件中的对应全局变量定义:

决策引擎的全局列表配置示例

List<String> list = new ArrayList<>();
KieSession kieSession = kiebase.newKieSession();
kieSession.setGlobal( "myGlobalList", list );

包含规则的全局变量定义示例

global java.util.List myGlobalList;

rule "Using a global"
  when
    // Empty
  then
    myGlobalList.add( "My global list" );
end

警告

不要使用全局变量在规则中建立条件,除非全局变量具有恒定的不可变值。全局变量不会插入到决策引擎的工作内存中,因此决策引擎无法跟踪变量的值更改。

不要使用全局变量在规则间共享数据。规则始终原因并响应正常工作的内存状态。因此,如果要将数据从规则传递给规则,请向决策引擎的工作内存中断言数据。

全局变量的用例可能是电子邮件服务的实例。在调用决策引擎的集成代码中,您可以获取您的 emailService 对象,然后在决策引擎的工作内存中设置它。在 DRL 文件中,您声明有一个全局类型 emailService,并为它指定名称 "email",然后在规则结果中,您可以使用电子邮件等操作 ,如 email.sendSMS(number)

如果您在多个软件包中声明具有相同标识符的全局变量,则必须使用相同类型设置所有软件包,以便它们都引用同一全局值。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.