2009-10-23 19 views
0

Je fais ksession.insert (liste) et après je dois déclencher la règle 1 dans le fichier drl, puis ksession.insert (liste) et la règle de feu 2 dans le drl.Dans Drools Rules, comment utiliser deux objets ArrayList différents, obj1 est utilisé dans la règle 1 et obj2 utilisé dans rule2?

Quelqu'un pourrait me dire comment y parvenir. J'ai lu sur les filtres de l'ordre du jour et facthandles mais je ne sais pas vraiment comment obtenir ce travail

ci-dessous est un code:

liste ArrayList = new ArrayList(); list.add (produit1); list.add (produit2); list.add (produit3);

ksession.insert (liste);
ksession.fireAllRules ("règle de feu 1 en drl");

// supprimer la liste?

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

ksession.insert (liste2); ksession.fireAllRules ("règle de feu 2 en drl");

Répondre

0

Vous ne contrôlez pas directement les règles qui sont déclenchées - les contraintes sur les règles le déterminent. Les filtres ne peuvent aider que si vous empêchez les règles de se déclencher.

1

Je pense qu'il ya une meilleure solution ... vous pouvez contrôler la correspondance de modèles ..

Voici une façon simple et rapide

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 

.. dans votre DRL et à l'intérieur Règle 1 ..when vous voulez la règle 1 à travailler avec arraylist1, cette mise en correspondance d'abord dans les LHS $al:ArrayList(this contains "Rule 1")

Voilà tout ce que ..