包含DRL规则中的新.drl文件

时间:2015-03-07 10:57:06

标签: include drools

我想基于"然后"加载一个新的drl文件。一些规则的条件。在下面的示例中,我想要包含一个新的" checkMasterData.drl"来自另一个drl文件的getFilteredMasterData()。size()> 3时的文件

rule "Check for mouse catch"
  dialect "java" 
when
  $notification:NotificationVO(getFilteredMasterData()!=null
 ,getFilteredMasterData().size()>3);
then
  #include checkMasterData.drl

有可能吗?或者,在fireall成功完成第一个drl文件

后,我需要从java代码中执行此操作

1 个答案:

答案 0 :(得分:1)

似乎你不能包含来自另一个的drl文件,但是你可以以编程方式这样做..根据这个thread,下面的代码可以用来将2个drl文件合并到同一个ruleBase中,就像它们一样工作在同一个文件中。

PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader(getClass().getResourceAsStream( "common.drl" ) ) );
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "rules1.drl" ) ) );
RuleBase ruleBase  = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( builder.getPackage()  );