2010-08-10 59 views
1

我有一个知识库用于执行我的数据模型验证。 UI中的修改事件会异步发布到单独的线程,以更新知识库并触发规则。验证错误会触发错误对象的逻辑插入。我可以收集这些信息并将事件异步发送回UI线程。但是,为了使UI保持最新更容易,我还希望在用户修复错误时发布事件 - 即从错误对象中撤消知识库。接收到Drools逻辑回收事件的通知

我对如何做到这一点有两个想法,我都不喜欢这两个想法:
我可以听程序代码中的工作记忆事件,但这会违反验证功能在知识库中的封装。或者,我可以插入一个与我的逻辑插入错误对象配对的标志对象,并编写一个检测未配对标志的规则,将它们撤回,并触发“错误修正”事件。

如上所述,是否存在一种基于错误对象的逻辑回收来激活规则的干净而简单的方法?

回答

1

自我回答,以便我可以稍后链接到此,并找出是否有更好的方法来做到这一点。

这是我清盘的办法考虑:

  1. 当验证规则被触发,insertLogical与代表验证错误(例如ValidationMessage)的唯一ID的对象。

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

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

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