Интеграция рабочей среды KIE из приложения Java

Я пытаюсь интегрировать рабочую среду Drools kie с приложением Java. Я использую jboss-as-7.1.1.Final в качестве рабочего места. Вот определение правила:

package adeveloperdairy.admission;
rule "set isEligible"
ruleflow-group "sample"
lock-on-active true
when
    $p : Student(gpa > 2.0)
then
    System.out.println("GPA is greater than 2..");
    $p.setEligible(true);
end

Вот мой код Java:

    String url = "http://localhost:8080/kie-wb-distribution-wars-6.2.0.Final-as7/maven2/adeveloperdiary/Admission/1.0/Admission-1.0.jar";

    String userpassword = "user4:456";
    KieServices ks = KieServices.Factory.get();
    KieRepository kr = ks.getRepository();
    HttpURLConnection http = (HttpURLConnection)new URL(url).openConnection();
    String authEnc = new Base64Encoder().encode(userpassword.getBytes());
    http.setRequestProperty("Authorization", "Basic "+ authEnc);
    InputStream is = http.getInputStream();
    KieModule kModule = kr.addKieModule(ks.getResources().newInputStreamResource(is));

    KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());
    System.out.println(kModule.getReleaseId().toString());

    KieBase kBase = kContainer.getKieBase();
    System.out.println(kBase.getKiePackages());
    System.out.println(kBase.getKiePackage("adeveloperdiary.admission").getRules());
    KieSession kSession = kBase.newKieSession();

    Student s = new Student();
    s.setName("Raj");
    s.setGpa(5.0f); 
    kSession.insert(s);
    kSession.fireAllRules();

Вот класс студенческого POJO:

 package adeveloperdiary.admission;

 /**
 * This class was automatically generated by the data modeler tool.
 */

 public class Student implements java.io.Serializable
{

 static final long serialVersionUID = 1L;

 private java.lang.String name;
 private java.lang.Float gpa;
 private java.lang.Boolean eligible;

 public Student()
 {
 }

 public java.lang.String getName()
 {
  return this.name;
 }

 public void setName(java.lang.String name)
 {
  this.name = name;
 }

 public java.lang.Float getGpa()
 {
  return this.gpa;
 }

 public void setGpa(java.lang.Float gpa)
 {
  this.gpa = gpa;
 }

 public java.lang.Boolean getEligible()
 {
  return this.eligible;
 }

 public void setEligible(java.lang.Boolean eligible)
 {
  this.eligible = eligible;
 }

 public Student(java.lang.String name, java.lang.Float gpa,
     java.lang.Boolean eligible)
 {
  this.name = name;
  this.gpa = gpa;
  this.eligible = eligible;
 }

}

Я могу получить развертывание Maven - adeveloperdiary: Admission: 1.0, package - [Package name = adeveloperdiary.admission], а также правило - [Rule name = set isElibility, scheduleGroup = MAIN, salience = 0, no-loop = ложь].

Но он не может выполнить правило. Может, я что-то здесь упускаю.


person Raghu    schedule 26.08.2016    source источник
comment
Можете ли вы предоставить класс Student POJO? кроме того, вы не включили правило ни в одну группу повестки дня, но ищете agendaGroup=admission   -  person piyushj    schedule 29.08.2016
comment
@piyushj Я добавил класс Student POJO, сгенерированный KIE workbench. Я удалил группу повестки дня (группу правил) из правила, и теперь она ГЛАВНАЯ. как я могу выполнить правило передачи данных (GPA и имя) из программы?   -  person Raghu    schedule 29.08.2016
comment
измените имя пакета на adeveloperdiary.admission вместо com.simple в файле drl   -  person piyushj    schedule 29.08.2016
comment
Я написал его как com.simple только здесь, чтобы он казался знакомым. но в моем правиле все в порядке.   -  person Raghu    schedule 29.08.2016
comment
все здесь знакомы, поэтому мы пытаемся помочь вам, но, давая неверные данные, вы усложняете себе жизнь.   -  person piyushj    schedule 29.08.2016
comment
Отлично. Я поменял его обратно. Теперь скажите мне, как я могу выполнить правила передачи данных (GPA и имя) из программы.   -  person Raghu    schedule 29.08.2016
comment
@Raghu Я вижу, что класс Student POJO был сгенерирован моделистом данных kie-workbench. Как вы интегрировали это в свой Java-код? Я предлагаю вам поделиться всем файлом класса, содержащим main.   -  person Naved Alam    schedule 31.08.2016
comment
@NavedAlam, я не знаю, как получить доступ к рабочему классу Student POJO из моего Java-кода. И именно здесь мне понадобилась помощь. Существуют ли какие-либо API Java (или фрагмент кода, если вы знаете) для доступа к этому классу POJO, вставки данных в его объект и, наконец, запуска правил?   -  person Raghu    schedule 31.08.2016
comment
@Raghu Добавлен шаг использования POJO в ваших правилах в новом ответе. Попробуйте, работает ли это для вас.   -  person Naved Alam    schedule 31.08.2016
comment
@Arjun Как получить файл .jar, указанный в переменной url?   -  person BlackMamba    schedule 06.05.2019


Ответы (2)


Я вижу, у вас проблемы с использованием класса POJO в рабочей среде kie. Вот шаг, чтобы импортировать простой POJO в рабочую среду и использовать его в правиле. Это было протестировано в последний раз для работы с версией 6.4.0.FINAL

Добавление внешней модели POJO в правила

Класс модели POJO, необходимый для проекта рабочей среды, необходимо экспортировать как maven jar и загрузить в рабочую среду. Если бы не maven jar, вы могли бы экспортировать его в простой jar. Если вы используете eclipse, это простой экспорт.

Загрузка jar-файла класса модели POJO

  • В kie workbench перейдите в Authoring -> Artifact Repository -> Upload -> Найдите Jar и загрузите
  • Если Jar не содержит файла pom.xml, вам будет предложено вручную ввести идентификатор группы и артефакта.

Добавление модели в проект

  • Перейдите к проекту -> Открыть редактор проекта.
  • В редакторе проекта в раскрывающемся списке выберите Зависимости.
  • Добавить из репозитория -> Выбрать файл jar класса модели.

Добавление и использование класса модели в Правилах.

  • Откройте редактор управляемых правил -> перейдите на вкладку «Объект данных».
  • Новый элемент -> Выбрать тип.
  • Затем тип можно использовать в редакторе правил.
person Naved Alam    schedule 31.08.2016
comment
спасибо за Ваш ответ. Я выполнил процедуру. Но после добавления внешнего jar-файла в проект появляется всплывающее окно с сообщением «Невозможно выполнить ваш запрос». Произошло следующее исключение: java.util.zip.ZipException: ошибка при открытии zip-файла. вы знаете, почему не удается открыть файл jar? а также я не сделал последний шаг. - person Raghu; 31.08.2016
comment
@Raghu .. какой шаг дает вам ошибку выше? Как вы создали файл Jar? Удалось ли вам увидеть содержимое jar-файла с помощью какого-нибудь инструмента для распаковки? - person Naved Alam; 31.08.2016
comment
Я получаю эту ошибку после добавления внешнего репозитория в проект рабочей среды в качестве зависимости. верстак становится очень медленным. Файл jar был создан из проекта maven в eclipse, и я могу видеть содержимое jar после его распаковки. Это хорошо. - person Raghu; 31.08.2016
comment
Фактически, когда я пытаюсь импортировать класс Student из внешнего репозитория (после добавления его в проект в качестве зависимости), он выдает ошибку: myDroolsProject.Student разрешается в пакет. можно добавить только тип. как это побороть? - person Raghu; 01.09.2016

Опустите ruleflow-group "sample" из кода DRL и попробуйте еще раз.

Вы можете проверить, сработают ли правильные правила, используя одно (!) Правило.

rule "hello"
when
then
    System.out.println( "hello" );
end

Если это не сработает, у вас проблема с настройкой. Если он срабатывает, у вас есть проблема в ваших правилах.

person laune    schedule 26.08.2016
comment
удалена группа правил. Но не повезло. Я не понимал, как пользоваться единым (!) Правилом. В любом случае, здесь это не имеет значения, поскольку я придерживаюсь только одного правила. Вы можете понять, где я ошибаюсь в коде ..? - person Raghu; 26.08.2016
comment
@Raghu Просто вставьте указанное выше правило вместо своего правила и попробуйте запустить свой код. Проверьте, печатается ли привет в консоли java. - person Naved Alam; 27.08.2016
comment
да, это правило срабатывает из моей Java-программы. Как я могу активировать правила для определенного пользователем объекта (в данном случае, Student), передающего факт (данные) из программы? - person Raghu; 29.08.2016