【问题标题】:Receiving notification of Drools logical retraction events接收 Drools 逻辑撤回事件的通知
【发布时间】:2011-06-22 21:56:38
【问题描述】:

我有一个用于验证我的数据模型的知识库。来自 UI 的修改事件被异步发布到一个单独的线程,该线程更新知识库并触发规则。验证错误触发错误对象的逻辑插入。我可以收集这些并将事件异步发布回 UI 线程。但是,为了更容易使 UI 保持最新状态,我还想在用户修复错误时发布一个事件——即从知识库中撤回错误对象时。

对于如何做到这一点,我有两个想法,但我都不喜欢:
我可以从程序代码中监听工作记忆事件,但这会违反知识库中验证功能的封装。

或者,我可以插入一个标志对象与我的错误对象的逻辑插入配对,并编写一个检测未配对标志的规则,收回它们,并触发“错误修复”事件。

是否有一种干净简单的方法来激活基于上述错误对象的逻辑撤回的规则?

【问题讨论】:

    标签: drools


    【解决方案1】:

    自我回答,以便我稍后可以链接到此链接,并了解是否有更好的方法。

    这是我最终采用的方法:

    1. 当验证规则被触发时,插入逻辑一个具有唯一 id 的对象,代表验证错误(例如 ValidationMessage)。

    2. ValidationMessage 有一个“已标记”属性,默认为 false。

    3. 定义一个在存在未标记的 ValidationMessage 时触发的规则。在 RHS 中,标记消息并对全局事件处理程序进行 onAssert 调用。插入与 ValidationMessage 具有相同 id 的第二个对象(例如 ValidationMessageFlag)。

    4. 定义一个规则,当没有对应的 ValidationMessage(具有相同的 id)存在时触发 ValidationMessageFlag。在 RHS 中,在全局事件处理程序中调用 onRetract。收回 ValidationMessageFlag。

    【讨论】:

      猜你喜欢
      • 2019-08-31
      • 2011-06-21
      • 2017-01-14
      • 2010-09-06
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多