Pregunta Recuperando datos de un tipo específico de la memoria de trabajo


En lugar de recuperar todos los hechos, necesito recuperar un tipo específico de hechos de la memoria de trabajo.

Aprendí que puedo recuperar todos los hechos de la memoria de trabajo como se muestra a continuación.

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

Proporcione algunos punteros para recuperar tipos específicos de objetos de la memoria de trabajo.


5
2018-02-22 23:51


origen


Respuestas:


En lugar de usar el método getObjects (), podría usar una consulta. Las consultas son como reglas sin RHS:

query "getObjectsOfClassA"
    $result: ClassA()
end

Puede usar todo el poder del lenguaje DRL dentro de sus consultas para crear patrones de coincidencia realmente complejos. Incluso puedes pasar argumentos a las consultas también: http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/#d0e7632

Luego, en su código java, puede invocar su consulta usando:

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
}

Si necesita el conjunto de todas las ClassA, puede usar una función de acumulación en su consulta.

Espero eso ayude,


6
2018-02-23 15:18



Podrías usar un ObjectFilter

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

Desafortunadamente, en Drools 5.5.0 Final, el método de la colección resultante no funciona como se esperaba. Por lo general, un método contains devuelve true, si el objeto buscado igual algo en la colección, pero la colección de Drool solo encuentra objetos, que tienen la misma referencia (usa == para comparar objetos).


5
2018-06-05 09:04