Я использовал проприетарный механизм правил и сейчас пытаюсь использовать Drools, я довольно новичок в Drools.
При использовании предыдущего механизма правил правило запускалось для всех экземпляров существующего объекта, даже если они были атрибутом другого объекта.
У меня есть набор правил, которые применяются к данному типу объекта O. Я добавляю в свой сеанс и объект O ', имеющий O в качестве атрибута. Но поскольку правила не применяются к O ', они не будут применяться к атрибуту O of O'.
Я проиллюстрирую это на примере слова HEllo:
Я добавил к основному примеру drool следующий класс:
public static class Email {
private Message message ;
public void setMessage(Message message) {
this.message = message;
}
public Message getMessage() {
return message;
}
}
Адрес электронной почты - O ', а Сообщение - O.
Моя сессия «работает» следующим образом:
...
Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);
Email email = new Email();
email.setMessage(message);
ksession.insert(email);
ksession.fireAllRules();
logger.close();
...
и у меня есть образец файла слюни:
rule "Hello World"
when
m : Message( status == Message.HELLO, myMessage : message )
then
System.out.println( myMessage );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE );
update( m );
end
Правило применяется только к сообщению.
Если я начну сеанс таким, какой он есть, правило не будет запущено.
Чтобы правила сработали, мне нужно добавить правило:
rule "email"
when
e : Email( message != null)
then
insert(e.getMessage());
end
Работает нормально, но мой вопрос: есть ли более простой способ запуска правила для каждого экземпляра объекта, даже если это атрибут другого объекта?