【发布时间】:2016-08-26 11:18:06
【问题描述】:
我正在尝试将 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 isEligible,agendaGroup=MAIN,salience=0,no-loop=false]。
但它无法执行规则。可能是我在这里遗漏了一些东西。
【问题讨论】:
-
你能提供
StudentPOJO 类吗?此外,您尚未将规则放入任何议程组,但您正在寻找agendaGroup=admission -
@piyushj 我添加了由 KIE 工作台生成的 Student POJO 类。我已经从规则中删除了议程组(规则流组),现在是“MAIN”。如何从程序执行规则传递数据(gpa 和名称)?
-
在drl文件中将包名改为
adeveloperdiary.admission而不是com.simple -
我把它写成“com.simple”只是为了让它听起来很熟悉。但在我的统治下,一切都井井有条。
-
这里的每个人都很熟悉,这就是我们试图帮助您的原因,但如果输入错误,您会让自己的生活变得更加艰难。