В правилах Drools, как использовать два разных объекта ArrayList, obj1 используется в правиле 1 и obj2 используется в правиле2? - PullRequest
0 голосов
/ 23 октября 2009

Я делаю ksession.insert (список), и после этого мне нужно запустить правило 1 в файле drl, затем ksession.insert (список) и запустить правило 2 в drl.

Может кто-нибудь сказать мне, как этого добиться. Я читал о фильтрах и фактических элементах повестки дня, но не знаю, как заставить это работать

Ниже приведен код:

ArrayList list = new ArrayList (); list.add (Product1); list.add (product2); list.add (product3);

ksession.insert (список);
ksession.fireAllRules ("правило огня 1 в drl");

// удалить список?

ArrayList list2 = new ArrayList (); list2.add (str1); list2.add (str2); list2.add (str3);

ksession.insert (песни2); ksession.fireAllRules («правило огня 2 в drl»);

Ответы [ 2 ]

1 голос
/ 09 апреля 2011

Я думаю, что есть лучший обходной путь ... вы можете контролировать сопоставление с образцом ..

Вот простой и быстрый способ

arrayList1.add("Rule 1");//if you can afford this without generics
arrayList1.add(...);//everything else you want to add
arrayList2.add("Rule 2");
arrayList2.add(..);//rest...

..
ksession.insert(..) ;//insert everything one by one

.. в твоих дрл и внутри правила 1 ... когда вы хотите, чтобы правило 1 работало с arraylist1, сначала сопоставьте это в lhs $al:ArrayList(this contains "Rule 1")

Вот и все ..

0 голосов
/ 26 октября 2009

Вы не можете напрямую контролировать то, что правила запускаются - ограничения на правила определяют это. Фильтры могут помочь, только если вы не позволяете правилам срабатывать.

...