¿Cómo cambiar dinámicamente las reglas de una determinada sesión de Drools 6.3?

Tengo una sesión en Drools 6.3.x que contiene unos pocos millones de datos.

Estoy creando una aplicación interactiva que, entre otras cosas, permite al usuario filtrar los hechos como quiera. En mi opinión, este filtro es básicamente un patrón. Una vez que se filtran los hechos, la lógica se aplica para producir el resultado deseado.

Debido a la naturaleza interactiva de la aplicación, prefiero no esperar a que la entrada del usuario cree unKieBase, derivar unKieSession, carga los pocos millones de datos y dispara las reglas todo el tiempo.

Idealmente, me gustaría crear unKieBase que contiene la lógica de la aplicación una vez, deriva unKieSession una vez, cargue todos los hechos una vez, y las reglas de inyección / eliminación sobre la marcha dependiendo de la entrada del usuario. ¿Cómo puedo hacer eso en Drools 6.3? Sé con certeza que fue posible con Drools 5.

Algún código para contextualizar mi pregunta. Este fragmento muestra cómo configurar la sesión de Drools:

    KieHelper helper = new KieHelper();

    String location = "/drools/logic.drl";
    InputStream stream = getClass().getResourceAsStream(location);
    Resource resource = ResourceFactory.newInputStreamResource(stream);
    helper.addResource(resource, ResourceType.DRL);

    Results results = helper.verify();
    if (results.hasMessages(Message.Level.ERROR)) {
        System.out.println(results.getMessages());
        System.exit(0);
    }

    KieBase base = helper.build();
    KieSession session = base.newKieSession();
    for (Source source : sources) {
        for (Object fact : source.getFacts()) {
            session.insert(fact);
        }
    }
    session.fireAllRules();

Por lo que puedo ver, elKieBase no proporciona ninguna forma de agregar nuevas reglas (solo formas de eliminarlas). Por lo tanto, no sé cómo proceder a partir del siguiente fragmento, si no inicializo elKieSession desde cero ...

    String rule = "package boot\n" +
            "\n" +
            "rule \"Stamp\"\n" +
            "when\n" +
            "\t$o: Object()\n" +
            "then\n" +
            "\tSystem.out.println($o);\n" +
            "end\n";
    InputStream ruleStream = new ByteArrayInputStream(rule.getBytes());
    Resource ruleResource = ResourceFactory.newInputStreamResource(ruleStream);
    helper.addResource(ruleResource, ResourceType.DRL);

¿Cualquier sugerencia?

Respuestas a la pregunta(0)

Su respuesta a la pregunta