2015-03-07 3 views
0

Я хочу загрузить новый drl-файл на основе условия «когда тогда» некоторого правила. В следующем примере я хочу, чтобы включить новый файл "checkMasterData.drl", когда getFilteredMasterData(). Размер()> 3 из другого DRL файлаВключить новый .drl-файл из правила DRL

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

конец

это возможно? Или мне нужно сделать это из java-кода после того, как firewall выполнил первый файл drl.

+1

Скорее всего, это не очень хорошая идея: вам нужно создать новый сеанс со всем, что с ним связано. - Пожалуйста, опишите * проблему *, которую вы должны решить, прежде чем обсуждать техническое решение. – laune

ответ

0

Кажется, вы не можете включить drl-файл из другого, но вы можете сделать это программно .. в соответствии с этим thread следующий код может использоваться для объединения двух файлов drl в одну и ту же базу правил и работает так, как если бы они были в одном файле.

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() ); 
+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (// meta.stackoverflow.com/q/8259) включить сюда основные части ответа и предоставить ссылку для справки. – manetsus

Смежные вопросы