use*_*653 6 drools drools-fusion
而不是检索所有事实,我需要从工作记忆中检索特定类型的事实.
我了解到我可以从工作记忆中检索所有事实,如下所示.
drools.getWorkingMemory().getWorkingMemoryEntryPoint("Stream").getObjects();
Run Code Online (Sandbox Code Playgroud)
请提供一些指针,以从工作内存中检索特定类型的对象.
您可以使用查询而不是使用getObjects()方法.查询就像没有RHS的规则:
query "getObjectsOfClassA"
$result: ClassA()
end
Run Code Online (Sandbox Code Playgroud)
您可以在查询中使用DRL语言的所有功能来创建非常复杂的匹配模式.您甚至可以将参数传递给查询:http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/#d0e7632
然后,在您的Java代码中,您可以使用以下命令调用您的查询:
QueryResults results = ksession.getQueryResults( "getObjectsOfClassA" );
for ( QueryResultsRow row : results ) {
ClassA classA = ( ClassA ) row.get( "$result" ); //you can retrieve all the bounded variables here
//do whatever you want with classA
}
Run Code Online (Sandbox Code Playgroud)
如果您需要所有ClassA的集合,则可以在查询中使用accumulate函数.
希望能帮助到你,
您可以使用ObjectFilter
Collection<Object> myfacts = session.getObjects( new ClassObjectFilter(MyFact.class) );
Run Code Online (Sandbox Code Playgroud)
不幸的是,在Drools 5.5.0 Final中,生成的集合包含方法无法按预期工作.通常一个包含方法返回true,如果搜索到的对象等于集合中的东西,但口水的集合只能找到对象,它具有相同的参考(它使用==来比较对象).
| 归档时间: |
|
| 查看次数: |
9794 次 |
| 最近记录: |