Java KieScanner在运行时不更新KieSessions

Java KieScanner在运行时不更新KieSessions,java,drools,kie,Java,Drools,Kie,我将Drools与Eclipse和Maven一起用于一个执行许多模式匹配的应用程序。我想使用KieScanner自动更新正在运行的KieScanner会话,而无需重新启动应用程序。但这似乎不起作用 我在org.kie和org.drools中使用7.24.0.t043 为此,我只使用本地Maven repo,因此在我的settings.xml中指定了路径并设置为true。我还验证了使用最新版本创建一个新容器可以注册更改的规则。KieScanner.scanNow()似乎不适合我。我查看了错误日志,

我将Drools与Eclipse和Maven一起用于一个执行许多模式匹配的应用程序。我想使用KieScanner自动更新正在运行的KieScanner会话,而无需重新启动应用程序。但这似乎不起作用

我在org.kie和org.drools中使用7.24.0.t043

为此,我只使用本地Maven repo,因此在我的settings.xml中指定了路径并设置为true。我还验证了使用最新版本创建一个新容器可以注册更改的规则。KieScanner.scanNow()似乎不适合我。我查看了错误日志,似乎根本没有任何错误,一切正常。我很确定,我还将每个版本正确地打包到KJAR中,并将它们安装到我当地的Maven repo中。此外,我将我的新kjar版本作为2.0.0-SNAPSHOT

kContainer.updateToVersion()
仅当我在会话设置过程中在runner类的开头调用它时才对我有效,但如果我在下面的while循环中调用它则无效

在这里,我正在跑步课上设置我的跑步课程:

KieServices-ks=KieServices.Factory.get();
ReleaseId ReleaseId=ks.newReleaseId(“com.app”、“我的app”、“1.0.0”);
KieContainer kContainer=ks.newKieContainer(releaseId);
KieScanner kScanner=ks.newKieScanner(kContainer);
kScanner.scanNow();
KieSession kSession=kContainer.getKieBase().newKieSession();
设置好后,我将对象插入kSession并调用fireAllRules()一次

我正在使用while循环打印对我的对象所做的更改(已插入到kSession中):

while(true){
System.out.println(“a1的匹配:+a1.getMatches());
时间单位。秒。睡眠(10);
}
我希望在更新的规则之后打印出更新的匹配项,但是实际的打印并没有改变匹配项

Pom文件:


4.0.0
com.app
基因泰克马文poc
0.0.1-快照
基因泰克马文POC
1.8
1.8
7.24.0.t043
本地回购
本地马文回购
file://Users/mtsiang/.m2/repository
真的
总是
org.slf4j
slf4j简单
1.7.26
org.kie
基亚皮
${runtime.version}
org.kie
基茨
${runtime.version}
运行时
org.drools
流涎核
${runtime.version}
org.drools
drools编译器
${runtime.version}
朱尼特
朱尼特
4.12
测试

如果您需要我提供更多信息,请告诉我,我不确定您还需要包括哪些信息才能了解问题。

因此,我找到了原因

指定容器创建和发布ID时,请确保使用“最新”,如中所示:

ReleaseId ReleaseId=ks.newReleaseId(“com.app”、“我的app”、“最新”)//而不是“1.0.0”
KieContainer kContainer=ks.newKieContainer(releaseId);
这样,KieScanner将读取Maven repo metadata.xml文件中的
标记


要启动新规则,还需要调用
kSession.update(FACTHANDLE,OBJ)
然后
kSession.fireAllRules()

所以,我找到了原因

指定容器创建和发布ID时,请确保使用“最新”,如中所示:

ReleaseId ReleaseId=ks.newReleaseId(“com.app”、“我的app”、“最新”)//而不是“1.0.0”
KieContainer kContainer=ks.newKieContainer(releaseId);
这样,KieScanner将读取Maven repo metadata.xml文件中的
标记

要启动新规则,还需要调用
kSession.update(FACTHANDLE,OBJ)
然后
kSession.fireAllRules()