7

すべてのファクトを取得する代わりに、作業メモリーから特定のタイプのファクトを取得する必要があります。

以下のように、ワーキングメモリからすべての事実を取得できることを学びました。

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

作業メモリーから特定のタイプのオブジェクトを取得するためのポインターをいくつか提供してください。

4

2 に答える 2

9

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 のセットが必要な場合は、クエリで累積関数を使用できます。

それが役に立てば幸い、

于 2013-02-23T15:18:17.733 に答える
7

ObjectFilter を使用できます

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

残念ながら、Drools 5.5.0 Final では、結果のコレクションの contains メソッドが期待どおりに機能しません。通常、検索対象のオブジェクトがコレクション内の何かと等しい場合、contains メソッドは true を返しますが、Drool のコレクションは同じ参照を持つオブジェクトのみを検索します (オブジェクトの比較には == を使用します)。

于 2013-06-05T09:04:29.680 に答える