2009-10-23 79 views
0

我正在做ksession.insert(列表),之後我必須在drl文件中激發規則1,然後在drl中激發ksession.insert(list)和fire規則2。在Drools規則中,如何使用兩個不同的ArrayList對象,在規則1中使用obj1,在規則2中使用obj2?

有人能告訴我如何做到這一點。我讀到議程過濾器和facthandles,但真的不知道如何得到這個工作

下面是一些代碼:

ArrayList的列表=新的ArrayList(); list.add(product1); list.add(product2); list.add(product3);

ksession.insert(list);
ksession.fireAllRules(「fire rule 1 in drl」);

//刪除列表?

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

ksession.insert(list2); ksession.fireAllRules(「DRL中的消防規則2」);

回答

0

您不直接控制什麼規則觸發 - 規則的約束條件決定了這一點。如果您停止觸發規則,過濾器只能提供幫助。

1

我認爲這是一個更好的解決辦法......你可以控制的模式匹配..

這裏有一個簡單,快捷的方式

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 

.. 在你的DRL和內部規則1 ..when你想第1 arraylist1工作,在LHS $al:ArrayList(this contains "Rule 1")

這是所有..

首先要有這種匹配3210