来自 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 方法内。菜鸟错误