Drools 5.5.0.FinalからDrools 6.5.0.CR2にアップグレードする途中で、カスタムイベントリスナーで問題が発生していますObjectInsertedEventsの場合は、挿入をトリガしたルールのLHSを参照します。発生したルールのLHSバインディングのタイプに応じて、リスナーは新しく挿入されたファクトのプロパティを更新します。Drools 6 - ObjectInsertedEventのLHSへのアクセス
はDroolsの5では、我々はDebugWorkingMemoryEventListenerを拡張するカスタムイベントリスナでこれをやったとWorkingMemoryEventListenerを実装:
public void objectInserted(ObjectInsertedEvent event) {
Rule firedRule = event.getPropagationContext().getRuleOrigin();
if (firedRule != null) {
PropagationContext pc = event.getPropagationContext();
Tuple tuple = pc.getLeftTupleOrigin();
Map<String, Declaration> declarationsMap = firedRule.getDeclarations();
// Iterate through the LHS variable bindings
for (Map.Entry<String, Declaration> entry : declarationsMap.entrySet()) {
// Get the value, via the handle to the fact in working memory to which the variable is bound
Declaration declaration = entry.getValue();
FactHandle factHandle = tuple.get(declaration);
// Get the object in working memory via the fact handle
Object bindingObj = ss.getObject(factHandle)
// do some other checks, update the inserted object if necessary
}
}
}
WorkingMemoryEventListenerはDroolsの6で廃止されましたので、私はRuleRuntimeEventListenerに更新されましたが、それは私のように見えますObjectInsertedEventを起動したルールのLHSにアクセスすることはできません。ルール自体(名前、パッケージ、メタデータ)に関する基本情報のみが使用できます。代わりに、私はAgendaEventListenerとAfterMatchFiredEventを使って解雇されたルールのLHSにアクセスできましたが、オブジェクトが挿入されているかどうかはわかりませんし、2)私ができる場合でもオブジェクトを更新する方法はありませんそれが挿入されているかどうかを判断する。
Drools 5のリスナー動作をDrools 6 APIの変更でどのように複製できますか?ありがとう。