Como alterar dinamicamente as regras de uma determinada sessão do Drools 6.3?

Tenho uma sessão no Drools 6.3.x contendo alguns milhões de fatos.

Estou construindo um aplicativo interativo que, entre outras coisas, permite ao usuário filtrar os fatos como ele deseja. Na minha opinião, esse filtro é basicamente um padrão. Depois que os fatos são filtrados, a lógica é aplicada para produzir o resultado desejado.

Devido à natureza interativa do aplicativo, prefiro não esperar a entrada do usuário para criar umKieBase, derivar umKieSession, carregue alguns milhões de fatos e dispare as regras o tempo todo.

Idealmente, eu gostaria de criar umKieBase contendo a lógica do aplicativo uma vez, derivar umKieSession uma vez, carregue todos os fatos uma vez e as regras de injetar / remover rapidamente, dependendo da entrada do usuário. Como posso fazer isso no Drools 6.3? Eu sei com certeza que era possível com o Drools 5.

Algum código para contextualizar minha pergunta. Este trecho mostra como configurar a sessão 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();

Tanto quanto eu posso ver, oKieBase não fornece nenhuma maneira de adicionar novas regras (apenas maneiras de removê-las). Portanto, não sei como proceder a partir do seguinte trecho, se não estiver inicializando oKieSession do princípio...

    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);

Alguma sugestão?

questionAnswers(0)

yourAnswerToTheQuestion