java - 我们可以在jbpm6脚本任务中访问drools规则引擎的工作内存事实吗?

标签 java drools jbpm

有没有办法在jbpm6脚本任务中访问drools规则引擎的工作内存事实?

我有一个模型类:Application.java 规则:检查工资是否> 10000(规则组的一部分:salaryCheck)

jbpm流程:开始->salaryCheck(规则任务,与规则组关联:salaryCheck)->updateScore(脚本任务)->结束

updateScore - 脚本 rask 代码:

System.out.println(System.out.println((Application)(kcontext.getKieRuntime().getFactHandles().toArray()[0]));

错误:

java.lang.ClassCastException: org.drools.core.common.DefaultFactHandle cannot be cast to org.model.Application

更新的脚本任务:

import org.model.Application
import org.drools.runtime.rule.QueryResults
import org.drools.runtime.rule.QueryResultsRow

QueryResults results = kcontext.getKieRuntime().getQueryResults( "getObjectsOfApplication" ); 
for ( QueryResultsRow row : results ) {
    Application applicantion = ( Application ) row.get( "$result" ); 
    application.setScore(700);
    System.out.println("Application object :: "+ application);
}

向规则 drl 文件添加了查询

query "getObjectsOfApplication"
    $result: Application()
end

最佳答案

getFactHandles() 绝对不是您正在寻找的方法。您正在寻找的方法是getObjects()。不管怎样,在没有任何验证的情况下获取返回集合的第一个元素对我来说似乎很危险。您甚至无法保证返回集合中元素的顺序在不同调用之间保持相同。

更好的方法是使用接受 ObjectFilter 参数的 getObjects() 版本。更好、更“声明性”的方法是定义一个查询,返回您正在查找的确切对象。然后,您可以使用 kcontext.getKieRuntime().getQueryResults() 执行查询。

您可以在此线程中更好地了解这两种方法中的任何一种(使用 ObjectFilter 或查询):Retrieving facts of a specific type from working memory

<小时/>

编辑:

我建议的有关使用查询或 ObjectFilter 的帖子是 Drools 5 代码。在 Drools 6 中,API 类被移至不同的包中。如果您想在代码中调用查询,则应该使用这些导入:

  • org.kie.api.runtime.rule.QueryResults
  • org.kie.api.runtime.rule.QueryResultsRow

这些类都是 kie-api 项目的一部分。

关于java - 我们可以在jbpm6脚本任务中访问drools规则引擎的工作内存事实吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32854650/

相关文章:

java - Google Drive V3 中 eTag 字段的替代方案?

java - 取消部署 JBoss Drools 应用程序时出现异常

java - JVM 耗尽连接,导致 CPU 利用率高和 OutOfMemoryException

java - 禁止触发另一个流口水规则

jbpm - Kie Server、Business Central 和 Kie Workbench 之间的区别?

java - 在Java中,有没有可能执行一个方法一段时间,达到时间限制就停止?

java - Object 类中是否也有 super() ,如果有的话它指向哪里?

java - 错误-/bin/sh : java: command not found

mysql - 在 Jbpm 5.4 中持久化数据

linux - 如何将 Tomcat 6 应用程序从 Windows XP 移植到 Linux?