2013-02-22 10 views
5

Zamiast pobierać wszystkie fakty, muszę odzyskać określony typ faktów z pamięci roboczej.Pobieranie faktów określonego typu z pamięci roboczej

Nauczyłem się, że mogę odzyskać wszystkie fakty z pamięci roboczej, jak poniżej.

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

Proszę podać kilka wskaźników do pobrania określonego rodzaju obiektów z pamięci roboczej.

Odpowiedz

4

Zamiast używać metody getObjects() można użyć zapytania. Zapytania są jak reguł bez RHS:

query "getObjectsOfClassA" 
    $result: ClassA() 
end 

można wykorzystywać całą moc języka DRL wewnątrz zapytań do tworzenia bardzo skomplikowanych wzorów ogłoszeń. Można nawet przekazywać argumenty do zapytań też: http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/#d0e7632

Następnie w kodzie java, można wywołać zapytanie przy użyciu:

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 
} 

Jeśli potrzebujesz zbiór wszystkich ClassA można użyć funkcji akumuluj w Twoje zapytanie.

Nadzieja pomaga,

5

Można użyć ObjectFilter

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

Niestety w Drools 5.5.0 końcowy uzyskany zbiór zawiera metoda nie działa zgodnie z oczekiwaniami. Zwykle metoda contains zwraca true, jeśli szukany obiekt jest równy coś w kolekcji, ale kolekcja Droola znajduje tylko obiekty, które mają to samo odniesienie (używa == do porównywania obiektów).

Powiązane problemy