一個
rulebase instance
是線程安全的,所有你可以在你的應用中,讓一個
rulebase instance
在多個線程中共享。對于一個
rulebase
的最通常的操作是產(chǎn)生一個新的
WorkingMemory
。
這個
rulebase
保持著到它所產(chǎn)生的
WorkingMemoryd
的弱引用,所以在長時間運行的
WorkingMemory
中,如果
rules
發(fā)生改變,這些
WorkingMemory
可以即使的根據(jù)最新的
rules
進行更新,而不必重啟
WorkingMemory
。你也可以指定
RuleBase
不必保持一個弱引用,但是你要保證
RuleBase
不用更新。
ruleBase.newWorkingMemory();??
//
?maintains?a?weak?reference.
ruleBase.newWorkingMemory(?
false
?);?
//
?do?not?maintain?a?weak?reference
任何時候,
Package
可以被加入或移除;所有的改變都會被反映到現(xiàn)存的
WorkingMemory
中。不要忘了調(diào)用
fireAllRules()
讓
Activations
激發(fā)。
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
雖然有刪除一個單獨規(guī)則的方法,但是卻沒有加入一個單獨規(guī)則的方法(要達到這個目的只有加入一個只有一條規(guī)則的
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?);