Я передаю список List<ArrayList> list = new ArrayList<>();
в слюни, а внутренний массив содержит объекты класса TaxPayer, и мое правило похоже на
rule "test1"
when
$l:TaxList($k : list)
$b:ArrayList() from $k
$a:Object() from $b
then
if($a instanceof TaxPayer){
$b.add(new TaxPayer(7,6,5,4,3,2,1));
}
if($a instanceof Object){
$b.add(new TaxPayer(1,2,3,4,5,6,7));
}
end
Второй если работает нормально, а в первый не идет, хотя это экземпляр TaxPayer
1 ответ
Я попытался выполнить вышеуказанное правило как:
rule "test"
when
$c : TaxList($list : list)
$b : ArrayList() from $list
$testobj: Object() from $b
then
if ($testobj instanceof TaxPayer){
System.out.println("inside if 1");
}
if ($testobj instanceof Object) {
System.out.println("inside if 2 ");
}
end
Это работает нормально для меня. Результат, который я получаю:
inside if 1
inside if 2
inside if 1
inside if 2 ...
Можете ли вы уточнить свою проблему и добавить соответствующий код Java к вопросу, чтобы я мог понять, как вы вставляете объект в сеанс drools. Пожалуйста, добавьте фрагмент кода Java и класс TaxList.
РЕДАКТИРОВАТЬ:
< Сильный > Main.java :
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.newKieClasspathContainer();
KieSession kieSession = kieContainer.newKieSession("test");
ArrayList<TaxPayer> taxPayers = new ArrayList<>();
taxPayers.add(new TaxPayer(1));
taxPayers.add(new TaxPayer(2));
ArrayList<ArrayList> arrayLists = new ArrayList<>();
arrayLists.add(taxPayers);
TaxList taxList = new TaxList(arrayLists);
kieSession.insert(taxList);
kieSession.fireAllRules();
}
}
TaxList.java:
import java.util.ArrayList;
public class TaxList {
ArrayList<ArrayList> list = new ArrayList<>();
public TaxList(ArrayList<ArrayList> list) {
this.list = list;
}
public ArrayList<ArrayList> getList() {
return list;
}
public void setList(ArrayList<ArrayList> list) {
this.list = list;
}
}
TaxPayer.java:
public class TaxPayer {
private int id;
public TaxPayer(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
Похожие вопросы
Новые вопросы
drools
Drools - это система управления бизнес-правилами (BRMS) с механизмом правил на основе прямого цепочечного вывода, более правильно называемым системой производственных правил, использующей расширенную реализацию алгоритма Rete.