2015-04-30 7 views
1

В качестве доказательства концепции я использовал инструмент Drools для создания объектов данных и файлов DRL. Я создал файл jar и развернул сервер kie (с контейнером). Все это осуществляется через интерфейс Workbench. Я использовал службы KIE REST из своего приложения C#, чтобы опубликовать входной объект через XML (с использованием пакетного исполнения), чтобы запустить правила, и я получил ответ, который я искал.Drools 6.2 Как создать и развернуть DRL-файл из моего собственного редактора правил

Но в реальном сценарии у нас будет собственный редактор правил (для удобства использования) для создания правил на основе атрибутов из существующих объектов. Как только правило будет сохранено в нашей БД, наш план состоит в том, чтобы сгенерировать файл DRL вместе с объектами данных.

Мой вопрос в том, как взять этот файл DRL и построить его как файл jar?

Для контейнера Kie необходим файл jar с объектами данных и файлом DRL. Кто-нибудь еще сделал что-то подобное?

Я пытаюсь найти лучший способ развернуть мой файл правил слюни. Другой альтернативой может быть использование IKVM для генерации dll из файла jar drools и интеграции drools в моем приложении.

ответ

2

Я думаю, что об этом задавали и отвечали раньше, но вот еще раз, код для компиляции DRL в KieBase или KieSession.

public KieBase build(String drlPath) throws Exception { 
    KieServices kieServices = KieServices.Factory.get(); 
    KieFileSystem kfs = kieServices.newKieFileSystem(); 
    FileInputStream fis = new FileInputStream(drlPath); 
    kfs.write("src/main/resources/some.drl", 
       kieServices.getResources().newInputStreamResource(fis)); 
    KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll(); 
    Results results = kieBuilder.getResults(); 
    if(results.hasMessages(Message.Level.ERROR)){ 
     System.out.println(results.getMessages()); 
     throw new IllegalStateException("### errors ###"); 
    } 
    KieContainer kieContainer = 
     kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId()); 

    KieBase kieBase = kieContainer.getKieBase(); 
    return kieBase; 
} 
+0

Laune, спасибо за Ваш ответ! Это хорошая альтернатива вызову сервера выполнения KIE, и он решает мою проблему сохранения файла DRL независимо от него. Но это убирает способность вызывать двигатель удаленно. Я не упомянул в своем оригинальном посте, что я планирую назвать это из моего .net web api. Я подумываю написать вышеуказанный код в java, а затем преобразовать его как .net dll, чтобы вызвать его из моего кода C#. Вы предлагаете лучший способ сделать это? –

+0

Компиляция из DRL в сериализованный KieBase - это просто трансформация: у вас есть один или несколько файлов DRL, и вы получаете двоичную KieBase. Это не имеет никакого отношения к удаленному вызову движка, который работает с использованием этой KieBase. – laune

+0

Да, я получил эту часть. Я ищу способ вызвать дистанционный движок удаленно с полным контролем над файлом .drl. Мой файл DRL будет создан моим собственным редактором правил, а приложение будет записано в .net. Мне нужна возможность либо вызвать двигатель удаленно, либо как-то написать код в .net. Я смог удаленно вызвать движок, установив kie-сервер выполнения с файлом jar, содержащим файлы DRL и объекты данных, но после этого нет простого способа изменить файл DRL. Я просто ищу идеи и вижу, что кто-то реализовал нечто похожее. Спасибо –