すべてのファクトを取得する代わりに、作業メモリーから特定のタイプのファクトを取得する必要があります。
以下のように、ワーキングメモリからすべての事実を取得できることを学びました。
drools.getWorkingMemory().getWorkingMemoryEntryPoint("Stream").getObjects();
作業メモリーから特定のタイプのオブジェクトを取得するためのポインターをいくつか提供してください。
すべてのファクトを取得する代わりに、作業メモリーから特定のタイプのファクトを取得する必要があります。
以下のように、ワーキングメモリからすべての事実を取得できることを学びました。
drools.getWorkingMemory().getWorkingMemoryEntryPoint("Stream").getObjects();
作業メモリーから特定のタイプのオブジェクトを取得するためのポインターをいくつか提供してください。
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 のセットが必要な場合は、クエリで累積関数を使用できます。
それが役に立てば幸い、
ObjectFilter を使用できます
Collection<Object> myfacts = session.getObjects( new ClassObjectFilter(MyFact.class) );
残念ながら、Drools 5.5.0 Final では、結果のコレクションの contains メソッドが期待どおりに機能しません。通常、検索対象のオブジェクトがコレクション内の何かと等しい場合、contains メソッドは true を返しますが、Drool のコレクションは同じ参照を持つオブジェクトのみを検索します (オブジェクトの比較には == を使用します)。