来自 java 应用程序的 drools workbench 的火规则
Fire rules on drools workbench from java application
这似乎是一个围绕流口水的热门问题...
我已经在 drools workbench 上创建了一些规则,并创建了一个简单的 java 应用程序来与之通信。
我能够连接到 workbench(身份验证等),我可以从规则集中检索名称,但我的 "fireAllRules()" 指令 returns 零和对我的对象没有影响。
但是,当我在本地(.drl 文件)添加完全相同的规则时,它运行顺利并且结果正确。
有什么想法吗?
规则(在 workbench 和本地):
package org1.notif;
rule "validate"
dialect "mvel"
when
c : Communication( status == "Pending" , type == "Dual" )
then
modify( c ) {
setStatus( "Executed" )
}
end
Java代码(用于与Workbench通信):
public static final void main(String[] args) {
try {
KieServices ks = KieServices.Factory.get();
KieResources resources = ks.getResources();
String url = "http://192.168.9.20:8080/drools-wb/maven2/org1/notif/1.0/notif-1.0.jar";
UrlResource urlResource = (UrlResource) resources.newUrlResource(url);
urlResource.setUsername("admin");
urlResource.setPassword("admin");
urlResource.setBasicAuthentication("enabled");
InputStream stream = urlResource.getInputStream();
KieRepository repo = ks.getRepository();
KieModule k = repo.addKieModule(resources.newInputStreamResource(stream));
KieContainer kc = ks.newKieContainer(k.getReleaseId());
KieBase kBase = kc.getKieBase();
System.out.println(kBase.getKiePackage("org1.notif").getRules());
KieSession kSession = kBase.newKieSession();
Communication c = new Communication();
c.setStatus("Pending");
c.setType("Dual");
kSession.insert(c);
System.out.println(kSession.fireAllRules());
System.out.println(c.getStatus());
kSession.dispose();
}
(...)
问题出在下面的语句System.out.println(kSession.fireAllRules());
为了使其正常工作,"fireAllRules" 指令不得位于 println 方法内。菜鸟错误
这似乎是一个围绕流口水的热门问题...
我已经在 drools workbench 上创建了一些规则,并创建了一个简单的 java 应用程序来与之通信。
我能够连接到 workbench(身份验证等),我可以从规则集中检索名称,但我的 "fireAllRules()" 指令 returns 零和对我的对象没有影响。
但是,当我在本地(.drl 文件)添加完全相同的规则时,它运行顺利并且结果正确。
有什么想法吗?
规则(在 workbench 和本地):
package org1.notif;
rule "validate"
dialect "mvel"
when
c : Communication( status == "Pending" , type == "Dual" )
then
modify( c ) {
setStatus( "Executed" )
}
end
Java代码(用于与Workbench通信):
public static final void main(String[] args) {
try {
KieServices ks = KieServices.Factory.get();
KieResources resources = ks.getResources();
String url = "http://192.168.9.20:8080/drools-wb/maven2/org1/notif/1.0/notif-1.0.jar";
UrlResource urlResource = (UrlResource) resources.newUrlResource(url);
urlResource.setUsername("admin");
urlResource.setPassword("admin");
urlResource.setBasicAuthentication("enabled");
InputStream stream = urlResource.getInputStream();
KieRepository repo = ks.getRepository();
KieModule k = repo.addKieModule(resources.newInputStreamResource(stream));
KieContainer kc = ks.newKieContainer(k.getReleaseId());
KieBase kBase = kc.getKieBase();
System.out.println(kBase.getKiePackage("org1.notif").getRules());
KieSession kSession = kBase.newKieSession();
Communication c = new Communication();
c.setStatus("Pending");
c.setType("Dual");
kSession.insert(c);
System.out.println(kSession.fireAllRules());
System.out.println(c.getStatus());
kSession.dispose();
}
(...)
问题出在下面的语句System.out.println(kSession.fireAllRules());
为了使其正常工作,"fireAllRules" 指令不得位于 println 方法内。菜鸟错误