Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们可以在jbpm6脚本任务中访问drools规则引擎的工作内存吗?_Java_Drools_Jbpm - Fatal编程技术网

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

Java 我们可以在jbpm6脚本任务中访问drools规则引擎的工作内存吗?,java,drools,jbpm,Java,Drools,Jbpm,在jbpm6脚本任务中,是否有方法访问drools规则引擎的工作内存事实 我有一个模型类:Application.java 规则:检查薪资是否大于10000(规则组的一部分:salaryCheck) jbpm流程:开始->工资检查(规则任务,与规则组关联:工资检查)->更新存储(脚本任务)->结束 updateScore-脚本rask代码: System.out.println(System.out.println((Application)(kcontext.getKieRuntime().g

在jbpm6脚本任务中,是否有方法访问drools规则引擎的工作内存事实

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

jbpm流程:开始->工资检查(规则任务,与规则组关联:工资检查)->更新存储(脚本任务)->结束

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
或查询):


编辑:

我建议使用查询或
ObjectFilter
的帖子是Drools 5代码。在Drools 6中,API类被移动到另一个包中。如果要在代码中调用查询,应使用以下导入:

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

这些类都是
kieapi
项目的一部分。

通过修改脚本任务更新了上面的问题。现在获取编译错误。text=导入错误:“org.drools.runtime.rule.QueryResults'],消息[id=2,level=Error,path=process/sample.bpmn,line=1,column=0 text=导入错误:“org.drools.runtime.rule.QueryResultsRow'],消息[id=3,level=ERROR,path=process/sample.bpmn,line=-1,column=0 text=流程编译错误只能导入类型。org.drools.runtime.rule.QueryResultsRow解析为包只能导入类型。org.drools.runtime.rule.QueryResults解析为包如果使用jBPM 5,则需要添加
知识api
对运行时环境的依赖性。