升级到Optaplanner 8/Drools: newKieSession返回null



我正在尝试从Optaplanner 7升级到Optaplanner 8..我在我的项目中使用口水。因为我需要方法fireAllRules,所以我需要访问kieSession。在升级之前,将kmodule.xml放在META-INF文件夹中并执行以下命令很容易:

KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
kieSession = kContainer.newKieSession("ksession-rules");
...
...
kieSession.fireAllRules()

升级后kContainer.newKieSession("ksession-rules");返回null。

升级前的Kmodule:

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="drl.eval" packages="drl.eval">
<ksession name="ksession-rules" />
</kbase>
</kmodule>

改变kmodule.xml:

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
<kbase name="drl.eval" packages="drl.eval">
<ksession name="ksession-rules" />
</kbase>
</kmodule>

我尝试了很多方法来使它工作,但我没有成功。有人知道我哪里做错了吗?

这永远不会工作,如果你能够在OP 7中这样做,你不应该这样做。KieSession是OptaPlanner的内部细节,你不能访问它——事实上,如果你这样做,你可能会破坏求解器。我们不能支持您的用例。(老实说,这是我第一次看到有人这样做,我很惊讶。)

作为旁注,从OptaPlanner 8.23.0开始。最后,不支持score DRL。

最新更新