Drools workbench:如何在规则文件中使用全局变量
Drools workbench: How to make use of global variables inside rule file
我正在使用与 Kie 执行服务器集成的 Drools workbench 7.17。我使用 workbench 创建了项目,其中包含数据模型、规则文件和全局定义。
如果执行规则并检索全局变量值,我想使用全局变量在其中设置一些值。我可以使用 spring 引导应用程序实现这一点,我们使用 kieSession.setGlobal("response", response);
在会话中添加全局变量并使用 kieSession.getGlobal("response")
检索它。我尝试使用 workbench 进行复制,但是当我尝试在全局变量中设置值时,出现 空指针异常 。下面是我的规则文件:
package com.myspace.drools_ruleengine;
import com.myspace.drools_ruleengine.Person;
global com.myspace.drools_ruleengine.Response response;
dialect "mvel"
rule "If person age >= 18 then person is adult"
no-loop
when
$p: Person(age >= 18)
then
response.setMessage("Adult"); // throwing error- null pointer exception
end
我已经创建了 全局定义 并添加了 response 作为 Response class 的别名。除此之外还有什么要求吗?我正在使用 Kie Server Rest API 来插入事实。
您需要在发送规则执行请求时初始化全局变量,例如:
<batch-execution>
<set-global identifier="obj">
<com.sample.Test/>
</set-global>
<insert>
<com.Person>
<name>abc</name>
</com.Person>
</insert>
<fire-all-rules/>
</batch-execution>
试试这个方法
我正在使用与 Kie 执行服务器集成的 Drools workbench 7.17。我使用 workbench 创建了项目,其中包含数据模型、规则文件和全局定义。
如果执行规则并检索全局变量值,我想使用全局变量在其中设置一些值。我可以使用 spring 引导应用程序实现这一点,我们使用 kieSession.setGlobal("response", response);
在会话中添加全局变量并使用 kieSession.getGlobal("response")
检索它。我尝试使用 workbench 进行复制,但是当我尝试在全局变量中设置值时,出现 空指针异常 。下面是我的规则文件:
package com.myspace.drools_ruleengine;
import com.myspace.drools_ruleengine.Person;
global com.myspace.drools_ruleengine.Response response;
dialect "mvel"
rule "If person age >= 18 then person is adult"
no-loop
when
$p: Person(age >= 18)
then
response.setMessage("Adult"); // throwing error- null pointer exception
end
我已经创建了 全局定义 并添加了 response 作为 Response class 的别名。除此之外还有什么要求吗?我正在使用 Kie Server Rest API 来插入事实。
您需要在发送规则执行请求时初始化全局变量,例如:
<batch-execution>
<set-global identifier="obj">
<com.sample.Test/>
</set-global>
<insert>
<com.Person>
<name>abc</name>
</com.Person>
</insert>
<fire-all-rules/>
</batch-execution>
试试这个方法