是,用例被支持,但要明白,Drools的6引入版本部署的工件(在Maven化kjars)的概念是重要的。換句話說,一旦你用版本X創建了一個kjar,它應該是不可變的。如果您想要將規則添加到/刪除在kjar中定義的庫,則應該創建另一個kjar版本X + 1。這個kjar可以作爲真正的jar或內存在物理上創建在磁盤中。
對於理解kjar是不可變源代碼的概念同樣重要,kcontainer是實例化kjar並允許使用它的kbases和ksessions的容器。
如果理解了這一點,那麼您只需要爲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"));
...
我可以將它連接到從Java代碼的工作臺。不管怎樣,即使事實匹配,規則也不會被解僱。請建議。 – Kumar
@埃德森感謝您的解釋。一個後續問題似乎是爲了更新我們需要保留的對舊KieContainer kc對象的引用的版本。這真的有必要嗎?說一個應用程序重新啓動時,我沒有對舊的KC對象的引用,我如何獲得指向舊版本ID的現有KieContainer對象的引用? – Yatin