Мне нужно добавить файлы.drl во время выполнения (из корзины S3) и передать их в механизм правил drools
Невозможно добавить правила во время выполнения через ResourceFactory.newURLResource(). Кроме того, база знаний устарела или не может быть решена
Я попробовал все фрагменты из документации
открытый класс RuleRunner {
public RuleRunner() {
}
public void runRules(String[] rules,
Object[] facts) throws Exception {
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
for ( int i = 0; i < rules.length; i++ ) {
String ruleFile = rules[i];
System.out.println( "Loading file: " + ruleFile );
kbuilder.add( ResourceFactory.newClassPathResource( ruleFile,
RuleRunner.class ),
ResourceType.DRL );
}
Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
kbase.addKnowledgePackages( pkgs );
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
for ( int i = 0; i < facts.length; i++ ) {
Object fact = facts[i];
System.out.println( "Inserting fact: " + fact );
ksession.insert( fact );
}
ksession.fireAllRules();
}
}
public KieContainer getKieContainer () {
String drlURL ="https://s3.amazonaws.com/somebucket4/rules.drl";
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write(ResourceFactory.newUrlResource(drlURL));
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieModule kieModule = kieBuilder.getKieModule();
return kieServices.newKieContainer(kieModule.getReleaseId());
}
1 ответ
В Drools теперь все ориентировано на банки. Поэтому вам необходимо перестроить ваш KJar (это может быть "виртуальный KJar" (KieModule), записанный только в файловую систему в памяти) с новыми правилами. Чтобы увидеть примеры, проверьте, например, класс IncrementalCompilationTest в Drools [1]. Вы также можете найти другие тестовые классы с примерами, если будете искать в кодовой базе Drools. Например, это [2].
[1] https://github.com/kiegroup/drools/blob/221cb15cde3ab5ea7388281d2c96158117ee3e19/drools-test-coverage/test-compiler-integration/src/test/java/org/drools/compiler/integrationtests/incrementalcompilation/IncrementalCompilationTest.java#L178
[2] https://github.com/kiegroup/drools/blob/a62949b27d35b423725da493bf53c252608438c7/drools-model/drools-model-compiler/src/test/java/org/drools/modelcompiler/IncrementalCompilationTest.java#L31