从Java应用程序集成KIE工作台

时间:2016-08-26 11:18:06

标签: java drools kie

我正在尝试将Drools kie workbench与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:门票:1.0,包 - [包名= adeveloperdiary.admission] 以及规则 - [Rule name = set isEligible,agendaGroup = MAIN,salience = 0,no-loop = false]。

但是它无法执行规则。可能是我在这里遗漏了一些东西。

2 个答案:

答案 0 :(得分:2)

我发现你在kie workbench中使用POJO类时遇到了问题。以下是在工作台中导入简单POJO并在规则中使用相同的步骤。这已经过测试,最后经过测试,可与6.4.0.FINAL版本一起使用

将外部POJO模型添加到规则

工作台项目所需的POJO模型类需要导出为maven jar并上传到工作台。如果不是maven jar,你可以将它导出到一个简单的jar。如果您正在使用eclipse,那么这是一个简单的导出。

上传POJO模型类jar

  • 在kie workbench中,转到Authoring - >工件库 - >上传 - > 浏览到Jar并上传
  • 如果Jar不包含pom.xml文件, 系统会要求您手动输入组和工件ID。

将模型添加到项目

  • 导航到项目 - >打开项目编辑器
  • 在项目编辑器中,从下拉列表中选择Dependencies。
  • 从存储库添加 - >选择模型类jar文件。

在规则中添加和使用模型类。

  • 打开指导规则编辑器 - >导航到“数据对象”选项卡。
  • 新项目 - >选择一种类型。
  • 然后可以在规则编辑器中使用该类型。

答案 1 :(得分:0)

忽略DRL代码中的ruleflow-group "sample",然后重试。

您可以使用单个(!)规则

测试是否会触发正确的规则
rule "hello"
when
then
    System.out.println( "hello" );
end

如果没有触发,则说明您的设置存在问题。如果它发生,你的规则就会出现问题。