14.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, message) 等操作。

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

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部