Retrieving facts of a specific type from working memory

后端 未结 2 617
长发绾君心
长发绾君心 2020-12-18 05:08

Instead of retrieving all facts i need to retrieve specific type of facts from working memory.

i learnt that i can retrieve all the facts from working memory as belo

相关标签:
2条回答
  • Instead of using the getObjects() method you could use a query. Queries are like rules without RHS:

    query "getObjectsOfClassA"
        $result: ClassA()
    end
    

    You can use all the power of DRL language inside your queries to create really complex matching patterns. You can even pass arguments to queries too: http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/#d0e7632

    Then, in your java code, you can invoke your query using:

    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
    }
    

    If you need the set of all ClassA you can use an accumulate function in your query.

    Hope it helps,

    0 讨论(0)
  • 2020-12-18 05:49

    You could use an ObjectFilter

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

    Unfortunately in Drools 5.5.0 Final, the resulting collection's contains method doesn't work as expected. Usually a contains method returns true, if the searched for object equals something in the collection, but Drool's collection only finds objects, which have the same reference (it uses == to compare objects).

    0 讨论(0)
提交回复
热议问题