我正在尝试从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。