关于drools的检查次数
最近在研究drools,发现一个问题,关于执行检查次数的
public class Unit {
private String name;
private Map<String, TT> tts = new HashMap<String, TT>();
// set and get
}
public class TT {
private String name;
// set and get
}
// package and import
rule "test"
when
$t: T ( $name: name == "test")
$u: Unit ( name == "name", tts contains $name)
then
System.out.println("OK");
end
// 创建session
Unit unit = new Unit();
unit.setName("name");
TT tt = new TT();
tt.setName("test");
unit.getTts().put(tt.getName(), tt);
FactHandle f = session.insert(unit);
session.insert(unit.getTts());
session.insert(tt);
// 开启线程
// 在新线程中,每秒执行一次session.update(f, unit);
// fire
s.fireUnitHalt();
package test;
import java.util.HashMap;
import java.util.Map;
public class Unit {
private String name;
private Map<String, TT> tts = new HashMap<String, TT>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map<String, TT> getTts() {
return tts;
}
public void setTts(Map<String, TT> tts) {
this.tts = tts;
}
}
package test;
public class TT {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package test;
import java.util.Collection;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.definition.KnowledgePackage;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.FactHandle;
public class Test {
public static void main(String[] args) throws InterruptedException {
KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
builder.add(ResourceFactory.newClassPathResource("test.drl"), ResourceType.DRL);
KnowledgeBuilderErrors errs = builder.getErrors();
if (!errs.isEmpty()) {
for (KnowledgeBuilderError e: errs) {
System.out.println(e.toString());
}
}
KnowledgeBase base = KnowledgeBaseFactory.newKnowledgeBase();
Collection<KnowledgePackage> col = builder.getKnowledgePackages();
base.addKnowledgePackages(col);
StatefulKnowledgeSession s = base.newStatefulKnowledgeSession();
Unit unit = new Unit();
unit.setName("name");
TT tt = new TT();
tt.setName("test");
unit.getTts().put(tt.getName(), tt);
FactHandle f = s.insert(unit);
s.insert(tt);
while (true){
s.fireAllRules();
s.update(f, unit);
Thread.sleep(500);
}
}
}
package test
rule "rule1"
when
$t: TT( $tname: name == "test")
$u: Unit( name == "name", tts contains $tname)
then
System.out.println("OK");
end