Drools файл не найден исключение - PullRequest
0 голосов
/ 25 октября 2018

Я смог успешно прочитать правила из каталога src/main/rules, и мой проект drools работает просто отлично.

Моя проблема возникает, однако, когда я хочу прочитать набор правил, например, из другого каталога, у меня есть второй проект drools с идентичными правилами.попытка прочитать в правилах из /home/user/Documents/workspace/OtherProject/src/main/ruls/Ruleset.drl приводит к ошибке

"/home/user/Documents/workspace/DroolsProject/src/main/rules/Ruleset.drl" cannot be opened because it does not exist

Я несколько раз проверял, что файл существует, даже копируя и вставляя вывод из pwd в мою переменную PATH (в проекте слюни) без удачи.

private static KnowledgeBase readKnowledgeBase(String ruleSet) throws Exception {
    KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    builder.add(
            ResourceFactory.newClassPathResource(
                    "/home/user/Documents/workspace/DroolsProject/src/main/rules/Ruleset.drl"),
            ResourceType.DRL);
    KnowledgeBuilderErrors errors = builder.getErrors();
    if (errors.size() > 0) {
        for (KnowledgeBuilderError error : errors)
            System.err.println(error);
        throw new IllegalArgumentException("Could not parse knowledge :(");
    }
    KnowledgeBase base = KnowledgeBaseFactory.newKnowledgeBase();
    base.addKnowledgePackages(builder.getKnowledgePackages());
    return base;
}

Это метод, который я использую для загрузки правил.

Конечная цель - загрузить файл правила на сервер (возможно, на /tmp) и запустить проект с использованием указанного файла правила.

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете следовать нижеприведенному подходу для загрузки файла правил из файловой системы:

KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();

File file = new File("path/to/Rule.drl");
org.kie.api.io.Resource resource = kieServices.getResources().newFileSystemResource(file).setResourceType(ResourceType.DRL);
kfs.write(resource);

KieBuilder Kiebuilder = kieServices.newKieBuilder(kfs);
Kiebuilder.buildAll();
KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
KieSession ksession = kieContainer.newKieSession();
...