SpringAMQPを使用してRabbitMQからのメッセージを読み取ります。メッセージが読み取られた後、メッセージは1つのヘッダー(親)オブジェクトと複数の詳細(子)オブジェクトに逆シリアル化されます。これらの事実は、Droolsステートレスルールセッションに挿入されます。最後に、更新されたファクトがデータベースに挿入されます。
収集機能または累積機能のいずれかを使用して詳細ファクトを集約するいくつかのルールがあります。これが例です。
rule "Header.TotalDuration"
when
h : BresHeader()
n : Number()
from accumulate( d : BresDetail(willSendToInvoice==true,
uniqueConfID == h.uniqueConfID),
sum(d.Duration) )
then
h.TotalDuration = new Integer(n.longValue());
System.out.println("[TotalDuration] rule ran");
end
これをjUnitで1回実行すると(1つのメッセージを読み取る)、TotalDurationが正しく計算されます。tomcat(メッセージを継続的に読み取る)で実行すると、TotalDurationの値が正しくなく、パスごとに増加し(メッセージが取得され、ルールが実行され、ファクトが保持され、繰り返されます)、理由がわかりません。
誰かがこの行動に光を当てることができますか?