日期:2014-05-20  浏览次数:20778 次

关于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  
}  

test.drl

// 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();  

最后的执行结果:
OK
OK
。。。。。。最终一共是显示20个OK,然后就不再显示了,很奇怪,不知道这个20次是哪定义的,或者是我的程序什么地方写的不对?
------解决方案--------------------
请列出所有的代码!
------解决方案--------------------
// 开启线程  
// 在新线程中,每秒执行一次session.update(f, unit);  

问题都不会提,最关键的地方竟然注释掉!
------解决方案--------------------
完整代码:
Unit: 

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;
}


}

TT: 

package test;

public class TT {

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

Test:

package test;

import java.util.Collection;

import org.drools.KnowledgeBase;