我在一个学区工作,我们计划使用 Drools 为学区组成学校的学生群体实现以下类型的规则:
所有这些规则都可以使用 Drools 专家来简单地表达。此外,学生的规则处理不需要同步。我有几个关于实现这一点的最佳方法的问题。
任何关于什么可能是最好的方法的建议将不胜感激。
戴夫
最佳答案
我会选择解决方案 2:每个学生一节课。鉴于您不会与 session 进行过多交互,我会将其保存在 db 中,仅在需要时恢复它:新的缺席/事件到达,该学生的 session 从 db 中恢复,事实插入,执行规则并检索结果状态。
我在这种情况下看到的主要缺点是,为多个学生创建规则并不简单,您必须将事实提供给多个 session 。例如,如果您想在一个类(class)中有超过 10 名处于 CRITICAL 状态的学生时发出警报。在这种情况下,每节课一个 session 就足够了。所以,正如你所看到的,你必须决定什么对你更好。但是无论您选择哪个“单位”(学校、类(class)、学生),我仍然会向您推荐我之前提到的执行流程。
Drools 已经支持使用 JPA 进行数据库持久化。您可以在此处获得有关此功能的更多信息:http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/#d0e3961
基本思想是,而不是使用 kbase.newStatefulKnowledgeSession()
创建您的 ksessions你使用名为 JPAKnowledgeService
的辅助类.此类将返回 StatefulKnowledgeSession
的包装器这将在每次方法调用后保持其状态。在本类(class)中,您将找到 2 个重要方法:newStatefulKnowledgeSession()
, 创建一个新的 ksession 和 loadStatefulKnowledgeSession()
从数据库中检索现有 session 。
希望能帮助到你,
关于drools - 坚持口水知识 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841355/