一个
rulebase instance
是线程安全的,所有你可以在你的应用中,让一个
rulebase instance
在多个线程中共享。对于一个
rulebase
的最通常的操作是产生一个新的
WorkingMemory
。
这个
rulebase
保持着到它所产生的
WorkingMemoryd
的弱引用,所以在长时间运行的
WorkingMemory
中,如果
rules
发生改变,这些
WorkingMemory
可以即使的根据最新的
rules
进行更新,而不必重启
WorkingMemory
。你也可以指定
RuleBase
不必保持一个弱引用,但是你要保证
RuleBase
不用更新。
ruleBase.newWorkingMemory();
//
maintains a weak reference.
ruleBase.newWorkingMemory(
false
);
//
do not maintain a weak reference
任何时候,
Package
可以被加入或移除;所有的改变都会被反映到现存的
WorkingMemory
中。不要忘了调用
fireAllRules()
让
Activations
激发。
ruleBase.addPackage( pkg );
//
Add a package instance
ruleBase.removePackage(
"
org.com.sample
"
);
//
remove a package, and all its parts,
by it's namespace
ruleBase.removeRule(
"
org.com.sample
"
,
"
my rule
"
);
//
remove a specific rule from a
namespace
虽然有删除一个单独规则的方法,但是却没有加入一个单独规则的方法(要达到这个目的只有加入一个只有一条规则的
package
)。
<!--[if !supportEmptyParas]-->
RuleBaseConfigurator
可以指定
RuleBase
的附加行为。在加入
RuleBase
后,
RuleBaseConfiguration
就变成不可变对象。
RuleBaseConfiguration conf
=
new
RuleBaseConfiguration();
conf.setProperty( RuleBaseConfiguration.PROPERTY_ASSERT_BEHAVIOR,
RuleBaseConfiguration.WM_BEHAVIOR_EQUALITY );
RuleBase ruleBase
=
new
ReteooRuleBase( conf );