2013-02-22 9 views
5

Invece di recuperare tutti i dati, è necessario recuperare il tipo specifico di fatti dalla memoria di lavoro.Recupero di fatti di un tipo specifico dalla memoria di lavoro

ho imparato che posso recuperare tutti i fatti dalla memoria di lavoro come di seguito.

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

Fornire alcune indicazioni per recuperare tipi specifici di oggetti dalla memoria di lavoro.

risposta

4

Invece di utilizzare il metodo getObjects() è possibile utilizzare una query. Le query sono come regole senza RHS:

query "getObjectsOfClassA" 
    $result: ClassA() 
end 

È possibile utilizzare tutta la potenza del linguaggio DRL dentro le vostre domande a creare modelli corrispondenti veramente complessi. È anche possibile passare gli argomenti alle domande troppo: http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/#d0e7632

Poi, nel codice Java, è possibile richiamare la query utilizzando:

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 
} 

Se è necessario l'insieme di tutte ClasseA è possibile utilizzare una funzione di accumularsi nei la tua domanda.

Speranza che aiuta,

5

È possibile usare un ObjectFilter

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

Purtroppo in Drools 5.5.0 finale, della collezione risultante contiene il metodo non funziona come previsto. Solitamente un metodo contiene restituisce true, se l'oggetto cercato equivale a qualcosa nella raccolta, ma la raccolta di Drool trova solo oggetti che hanno lo stesso riferimento (utilizza == per confrontare oggetti).