规则引擎开发日记2

做了一个测试,才觉得有了感觉,有一个问题弄了我很久,就是在运行后发现出现死循环,见下。
package com.common.Rule;
 
import com.acl.bo.WorkManager;
function void Console(String message){
	System.out.println(message);
}
rule "state"
salience 100
	when
		m : WorkManager (startHour > 8 || startHour == 8 && startMimute>=30)
	then
		m.setState(1);
		Console(m.getName()+"准时上班!");
		update(m);
end


rule "end"
salience 10
	when
		m : WorkManager (endHour < 17 || endHour == 17 && endMimute<=30)
	then
		Console(m.getName()+"准时下班!"+m.getState());
		
end
找了很多资料,不知道错在那里,后来发现原来是update(m),这里的问题,去掉后在程序中添加workingMemory.update(fh, workManager);或者workingMemory.modifyRetract(fh);就可以修改值,所以觉得有点思路,把这个记录下来。
      
     也许有人会问,为什么不能在上面用update,用了为什么出现死循环,当我在when中的条件不使用判断条件,它是可以实现的,这个问题,也许不是这个,我猜想可能是update后就会重新来执行一次规则,那么每次更新就每次执行,所以才会有那种情况,不过也仅仅是猜测。

     到下午偶尔才看到一个lock-on-active true属性,当需要update的时候,只需要在这个规则中声明lock-on-active true就可以不用在循环执行本规则方法。

你可能感兴趣的:(规则引擎)