[英]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模型类导出为Maven jar并上传到工作台。 如果不是Maven jar,则可以将其导出到简单的jar中。 如果您使用的是eclipse,则此操作很简单。
从您的DRL代码中省略ruleflow-group "sample"
,然后重试。
您可以使用单个(!)规则测试是否会触发正确的规则
rule "hello"
when
then
System.out.println( "hello" );
end
如果仍然无法启动,则说明您的设置存在问题。 如果触发,则您的规则存在问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.