是的,支持用例,但重要的是要了解 Drools 6 引入了版本化可部署工件(mavenized kjars)的概念。换句话说,一旦你创建了一个版本 X 的 kjar,它就应该是不可变的。如果要向 kjar 中定义的 kbase 添加/删除规则,则应创建另一个 kjar 版本 X+1。这个 kjar 可以作为真正的 jar 在磁盘中物理创建,也可以在内存中创建。
同样重要的是要理解 kjar 是不可变的源工件,而 kcontainer 是实例化 kjar 并允许使用其 kbase 和 ksession 的容器这一概念。
如果理解了,那么您需要做的就是实例化版本 X 的容器,当您想要更改 kbase 时,调用容器 updateToVersion(...) 方法将其更新到新版本。KBases 和 KSessions 像在 Drools 5 中一样被增量更新和保留。
单元测试:https ://github.com/droolsjbpm/drools/blob/master/drools-compiler/src/test/java/org/drools/compiler/integrationtests/IncrementalCompilationTest.java#L158
代码片段:
// work with version 1.0.0
ReleaseId releaseId1 = ks.newReleaseId("org.kie", "test-upgrade", "1.0.0");
...
// Create a session and fire rules
KieContainer kc = ks.newKieContainer( releaseId1 );
KieSession ksession = kc.newKieSession();
ksession.insert(new Message("Hello World"));
...
// upgrade to version 1.1.0
ReleaseId releaseId2 = ks.newReleaseId("org.kie", "test-upgrade", "1.1.0");
kc.updateToVersion(releaseId2);
// continue working with the session
ksession.insert(new Message("Hello World"));
...