gpt4 book ai didi

java - 流口水 6 : add rules to a running KieSession

转载 作者:行者123 更新时间:2023-12-02 09:03:10 26 4
gpt4 key购买 nike

到目前为止,我无法找出向 Drools 6.0.0 中正在运行的 KieSession 添加规则并仍将我的事实保留在 KieSession 中的最佳方法(即以最小的开销)。在 Drools 5 中,当 KBase 更改时,KSession 也会更新,但对于 Drools 6 似乎并非如此,因为我的规则不是在 KieBase 中创建的。有没有一种方法可以在不替换 KieFileSystem 中的整个 KieModules 或 Jars 的情况下完成此操作。我认为应该有一个简单的方法。

你们有什么想法吗?

问候

最佳答案

是的,支持该用例,但重要的是要了解 Drools 6 引入了版本化可部署工件(mavenized kjar)的概念。换句话说,一旦您创建了版本 X 的 kjar,它就应该是不可变的。如果您想向 kjar 中定义的 kbase 添加/删除规则,您应该创建另一个 kjar 版本 X+1。这个 kjar 可以作为真正的 jar 在磁盘中物理创建,也可以在内存中创建。

了解 kjar 是不可变源工件以及 kcontainer 是实例化 kjar 并允许使用其 kbase 和 ksession 的容器这一概念也很重要。

如果理解了这一点,那么您需要做的就是实例化版本 X 的容器,当您想要更改 kbase 时,调用容器 updateToVersion(...) 方法将其更新到新版本。 KBase 和 KSession 会像在 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"));
...

关于java - 流口水 6 : add rules to a running KieSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22205945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com