Drools - 能够在运行时定义规则?

Posted

技术标签:

【中文标题】Drools - 能够在运行时定义规则?【英文标题】:Drools - Ability to define rules at runtime? 【发布时间】:2012-03-14 09:25:48 【问题描述】:

可以在运行时完全动态地定义规则吗? 还要在运行时更改规则集。

例如,

at time = t_1 the ruleset is  R1, R2, R3  
at time = t_2 the ruleset is  R1, R3, R4  
..... 

R1、R2 是在运行时定义的规则。

谢谢。

【问题讨论】:

【参考方案1】:

是的,Drools 是完全动态的。您可以在运行时添加/删除/替换规则。所有现有会话都会自动更新以保持一致性。检查文档/javadoc:

http://www.jboss.org/drools/documentation

在这里你可以看到一些集成测试:

DynamicRulesTest.java

【讨论】:

是否有 Drools 7+ 的等价物(我使用的是 7.27.0.Final)。您指向的代码使用内部类/方法(KnowledgeBaseKnowledgeSession),而 KieBase 类没有 addPackage 方法。 有没有人有能力恢复丢失的文件DynamicRulesTest.java? 您答案中的所有链接目前都已损坏【参考方案2】:

在 Drools 5 中,您只需要更改 KnowledgeBase,它将使 KnowledgeSession 隐式保持最新。这就是集成测试告诉你的。您实际上不需要 KAgent。

【讨论】:

【参考方案3】:

阅读文档并查看有关“KnowledeAgent”的测试,了解您可以做什么以及如何做到这一点。

【讨论】:

以上是关于Drools - 能够在运行时定义规则?的主要内容,如果未能解决你的问题,请参考以下文章

将drools引导决策表编译成规则

在 Drools 6 中以编程方式创建新的 drools 规则的新接受方式是啥?

Drools 规则流程设计

Drools 文件未找到异常

Drools应用实例

Drools 规则中的全局变量