我正在尝试将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]。
但是它无法执行规则。可能是我在这里遗漏了一些东西。
答案 0 :(得分:2)
我发现你在kie workbench中使用POJO类时遇到了问题。以下是在工作台中导入简单POJO并在规则中使用相同的步骤。这已经过测试,最后经过测试,可与6.4.0.FINAL版本一起使用
工作台项目所需的POJO模型类需要导出为maven jar并上传到工作台。如果不是maven jar,你可以将它导出到一个简单的jar。如果您正在使用eclipse,那么这是一个简单的导出。
答案 1 :(得分:0)
忽略DRL代码中的ruleflow-group "sample"
,然后重试。
您可以使用单个(!)规则
测试是否会触发正确的规则rule "hello"
when
then
System.out.println( "hello" );
end
如果没有触发,则说明您的设置存在问题。如果它发生,你的规则就会出现问题。