Java 如何将规则应用于会话中对象的所有属性?
我使用的是一个专有的规则引擎,现在我正在尝试使用Drools,我对Drools还很陌生 使用以前的规则引擎,为现有对象的所有实例触发规则,即使它们是其他对象的属性 我有一组应用于给定类型对象O的规则。我将O添加到会话和对象O'中,并将O作为属性。但由于这些规则不适用于O',因此它们不会应用于O'的属性O 我将用一个HEllo word示例来说明这一点: 我在基本drool示例中添加了以下类:Java 如何将规则应用于会话中对象的所有属性?,java,drools,Java,Drools,我使用的是一个专有的规则引擎,现在我正在尝试使用Drools,我对Drools还很陌生 使用以前的规则引擎,为现有对象的所有实例触发规则,即使它们是其他对象的属性 我有一组应用于给定类型对象O的规则。我将O添加到会话和对象O'中,并将O作为属性。但由于这些规则不适用于O',因此它们不会应用于O'的属性O 我将用一个HEllo word示例来说明这一点: 我在基本drool示例中添加了以下类: public static class Email { private Messag
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();
...
我有一个drool文件示例:
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
它工作得很好,但我的问题是:有没有更简单的方法让规则在对象的每个实例上启动,即使它是另一个对象的属性?是的,您可以执行以下操作:
rule "Hello World"
when
$email: Email(message.status == Message.HELLO, $myMessage: message.message )
then
System.out.println( $myMessage );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE );
update( m );
end
或者,您可以使用规则将消息插入工作内存
Rule "insert message"
when
Email ($message: message)
then
insert($message);
end
使用这种方法,您可以只使用消息类型编写规则
干杯@RickyBobby我能问一下吗?如何将插入的
$message
获取到java代码?或者如果可能,将插入的对象从规则获取到java?