私のdrlは次のとおりです。
rule "Active Orders"
dialect "mvel"
//no-loop
when
m: Order( status == Order.ENABLED, id : id )
then
System.out.println( "Order Id is: " + id );
modify ( m )
{
status = Order.DISABLED
};
end
次のように、単一の Order インスタンスを drools に渡します。
Order order = new Order();
order.setId(100);
order.setStatus( Order.ENABLED );
ksession.insert( order );
ksession.fireAllRules();
ルールが無限に起動され、次のメッセージが表示されます。
Order Id is: 100
Order Id is: 100
Order Id is: 100
.....
無限ループは理解できますが、重要なのは、変更ブロックで注文ステータスを無効に設定していることです:
status = Order.DISABLED
したがって、 when ルールが再び起動されます.... WHEN 条件、つまり status == Order.ENABLED は満たされるべきではなく、 system.out.println メッセージが複数回表示されることはありません。
私は何が間違っているのですか?
(注意: 私の問題は無限ループではありませんが、オブジェクトの変更後にルールが正しく評価されない理由)