Drools: Как сравнить атрибуты двух разных объектов в drools?

Я использую drools для проверки бизнес-уровня. Можно ли загрузить два объекта в рабочую память и сравнить их значения? Допустим, у меня есть 2 объекта:

Object1{
String name;
}

Object2{
String sname;
}

Могу ли я сравнить имя (объект1) с именем (объект2) в файле drl?

Object1(name)==Object(name)

Я пытался добавить эту строку в файл drl, но выдает ошибку «Неожиданное имя токена».

Также помогите мне вставить эти объекты в рабочую память. Я получаю сеанс kie, используя следующие шаги

KieContainer container=KieServices.Factory.get().getKieClasspathContainer();

KieSession kieSession = container.newKieSession("SampleSession");

Теперь можно ли одновременно вставить объект1 и объект2, используя метод вставки?

kieSession.insert(object);

person Rohith Kammula    schedule 28.12.2016    source источник


Ответы (1)


Как вставлять объекты:

Object1 o1 = ...;
Object2 o2 = ...; 
kieSession.insert( o1 );
kieSession.insert( o2 );

Как сравнить их атрибуты:

rule namecomp
when
    Object1( $n1: name )
    Object2( sname == $n1 )
then
    System.out.println( "Names are equal" );
end

Это элементарные вопросы. Обязательно прочитайте документацию Drools.

person laune    schedule 28.12.2016
comment
Спасибо за помощь. Я собираюсь добавить другие правила в файл drl. Есть ли способ ограничить срабатывание вышеуказанного правила только для первых двух фактов? Я собираюсь вставить 4 факта в сеанс, и указанное выше правило должно срабатывать только для первых двух фактов. - person Rohith Kammula; 29.12.2016
comment
Первый и второй определяются порядком размещения? Вам нужно будет поддерживать атрибут для этих порядковых номеров и написать некоторые ограничения на его основе. Но это странное требование. -- Возможно, вы напишете еще один вопрос, предоставив всю предысторию, почему сразу 4 вопроса, почему должны совпадать только №1 и №2 и т. д. - person laune; 30.12.2016