【问题标题】:Retrieving facts of a specific type from working memory从工作记忆中检索特定类型的事实
【发布时间】:2013-02-22 23:51:04
【问题描述】:

我需要从工作记忆中检索特定类型的事实,而不是检索所有事实。

我了解到我可以从以下工作记忆中检索所有事实。

drools.getWorkingMemory().getWorkingMemoryEntryPoint("Stream").getObjects();

请提供一些指针以从工作内存中检索特定类型的对象。

【问题讨论】:

    标签: drools drools-fusion


    【解决方案1】:

    您可以使用查询来代替使用 getObjects() 方法。查询就像没有 RHS 的规则:

    query "getObjectsOfClassA"
        $result: ClassA()
    end
    

    您可以在查询中使用 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
    }
    

    如果您需要所有 ClassA 的集合,您可以在查询中使用累积函数。

    希望对你有帮助,

    【讨论】:

      【解决方案2】:

      你可以使用 ObjectFilter

      Collection<Object> myfacts = session.getObjects( new ClassObjectFilter(MyFact.class) );
      

      不幸的是,在 Drools 5.5.0 Final 中,生成的集合的 contains 方法无法按预期工作。通常一个 contains 方法返回 true,如果在集合中搜索到的对象 equals,但是 Drool 的集合只找到具有相同引用的对象(它使用 == 来比较对象)。

      【讨论】:

        猜你喜欢
        • 2011-05-21
        • 2013-11-22
        • 1970-01-01
        • 2011-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-20
        • 1970-01-01
        相关资源
        最近更新 更多