20

It is possible to define rules dynamically completely at runtime ? Also change the ruleset at runtime.

For example,

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

R1, R2 are rules that are defined at runtime.

Thanks.

ankitjaininfo
  • 11,961
  • 7
  • 52
  • 75
Soumya Simanta
  • 11,523
  • 24
  • 106
  • 161

3 Answers3

22

Yes, Drools is completely dynamic. You can add/remove/replaces rules at runtime. All the existing sessions are automatically updated in order to keep consistency. Check the documentation/javadoc:

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

And here you can see some integration tests:

DynamicRulesTest.java

Edson Tirelli
  • 3,891
  • 20
  • 23
  • 2
    Is there a equivalent for Drools 7+ (I am using 7.27.0.Final). The code you point to uses internal classes/methods (`KnowledgeBase` and `KnowledgeSession`), while the `KieBase` class does not have a `addPackage` method. – bfrguci Oct 10 '19 at 16:35
  • Does anyone have the power to resurrect that lost file, DynamicRulesTest.java? – Liam Bohl Feb 26 '21 at 03:11
  • All the links from your answer are currently broken – DiegoAlfonso Aug 19 '21 at 12:28
1

Read the documentation and check out the tests about "KnowledeAgent" to see what you can do and how you can do it.

Esteban Aliverti
  • 6,259
  • 2
  • 19
  • 31
0

In Drools 5 you just need to change KnowledgeBase, it will keep the KnowledgeSession implicitly up to date. That is what the integration tests tell you. You actually do not need a KAgent for that.

MattRossmann
  • 85
  • 2
  • 7