Java 比较两个POJO的两个字段的Drools规则
我有以下Java类: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
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 ) );