繁体   English   中英

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

[英]Integrating KIE workbench from a Java application

我正在尝试将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,程序包-[程序包名称= adeveloperdiary.admission]以及规则-[规则名称= set isEligible,议程组= MAIN,显着性= 0,无循环= false]。

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

我看到您在kie工作台中使用POJO类时遇到问题。 这是在工作台中导入简单POJO并在规则中使用相同步骤的步骤。 经测试,最后一次测试可与6.4.0.FINAL版本一起使用

将外部POJO模型添加到规则

需要将工作台项目所需的POJO模型类导出为Maven jar并上传到工作台。 如果不是Maven jar,则可以将其导出到简单的jar中。 如果您使用的是eclipse,则此操作很简单。

上载POJO模型类别jar

  • 在kie workbench中,转到创作-> Artifact存储库->上传->浏览到Jar并上传
  • 如果Jar不包含pom.xml文件,则将要求您手动输入组和工件ID。

向项目添加模型

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

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

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

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

您可以使用单个(!)规则测试是否会触发正确的规则

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

如果仍然无法启动,则说明您的设置存在问题。 如果触发,则您的规则存在问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM