Java 比较两个POJO的两个字段的Drools规则

Java 比较两个POJO的两个字段的Drools规则,java,drools,Java,Drools,我有以下Java类: public class A { private String text; public A(){ } public void setText(String text) { this.text=text; } public String getText() { return text; } } 及 我正在尝试编写Drools规则,该规则允许我比较类B中firstFiel

我有以下Java类:

public class A {

    private String text;

    public A(){
    }

    public void setText(String text) {
        this.text=text;
    }

    public String getText() {
        return text;
    }   

}

我正在尝试编写Drools规则,该规则允许我比较类B中firstField和secondField的文本属性。这是我的java代码:

    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kbuilder.add(ResourceFactory.newClassPathResource("myrule.drl"), ResourceType.DRL);
    KnowledgeBase kbase = kbuilder.newKnowledgeBase();
    StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
    B obj = new B();
    ksession.execute(obj);
以下是myrule.drl的内容:

package test
import my.package.A
import my.package.B

rule "myrule"
no-loop
    when
        $obj : B(firstField.getText().equals(secondField.getText()))
    then
        modify($obj){
            setSuccess((Boolean)true);
        }
end

不幸的是,这不起作用,我做错了什么?提前感谢

很奇怪,您的代码竟然可以编译,因为ksession.execute需要的是命令,而不是简单的B: 在您的简单场景中,我想您需要的是一个插入B对象的命令和另一个触发所有规则的命令。 您可以使用BatchExcution命令来实现这一点:

在上面的示例中,fire all rules命令是隐式的


希望有帮助,

由于罢工而无法工作?-适用于我,使用Drools 6.3.0。-请提供您的版本、堆栈跟踪或错误消息等。
package test
import my.package.A
import my.package.B

rule "myrule"
no-loop
    when
        $obj : B(firstField.getText().equals(secondField.getText()))
    then
        modify($obj){
            setSuccess((Boolean)true);
        }
end
B obj = new B();
List cmds = new ArrayList();        
cmds.add( CommandFactory.newInsertObject(obj) );
ksession.execute( CommandFactory.newBatchExecution( cmds ) );