gpt4 book ai didi

java - 从 Drools 6.0.1 迁移到 Drools 6.3.0-Final 出现意外的全局 [log] 错误

转载 作者:行者123 更新时间:2023-12-01 21:45:54 25 4
gpt4 key购买 nike

java.lang.RuntimeException: Unexpected global [log]
at org.drools.core.impl.StatefulKnowledgeSessionImpl.setGlobal(StatefulKnowledgeSessionImpl.java:1163)
  1. DRL 是从数据库中以字符串列表的形式检索的。
  2. 我们不使用 kmodule.xml关注评论:DRL(最小化设置以尝试定位问题)加载顺利,但不知何故,其中定义的全局变量却不是。

KieSession创建代码

 KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
KieFileSystem kFileSystem = ks.newKieFileSystem();

int i=0;
for (String ruleId : drls.keySet()){
Resource resource = ks.getResources().newByteArrayResource(drls.get(ruleId).getBytes());
resource.setTargetPath("./out/"+ ruleId +".drl");
resource.setResourceType(ResourceType.DRL);
kFileSystem.write(resource);
}
KieBuilder kieBuilder = ks.newKieBuilder( kFileSystem );
kieBuilder.buildAll();
KieBuilder kieBuilder = ks.newKieBuilder( kFileSystem );
kieBuilder.buildAll();
if (kieBuilder.getResults().hasMessages(Message.Level.ERROR)) {
log.error(PolicyUtils.createMsg("DRL Errors:\n" + kieBuilder.getResults().toString()), context, null, null);
throw new RuntimeException("DRL Errors:\n" + kieBuilder.getResults().toString());
}
kContainer = ks.newKieContainer(kr.getDefaultReleaseId());
kContainer.newKieSession();

最佳答案

在阅读了您在其他答案中与@laune 的聊天后,我想现在已经确定了问题:您的 KieBase 不包含您认为包含的工件(规则、全局变量等)。

不知道您的代码可能有什么问题,但我认为一个简单的解决方法可以使您免受所有样板(和容易出错)代码的困扰。

这里的想法是使用 KieHelper类,而不是使用 KieRepositoryKieFileSystemKieBuilder。实际上,创建 KieHelper 类是为了避免创建 KieBase 时涉及的复杂步骤(与 Drools 5.x 相比)。

使用 KieHelper 类,您可以重构代码,使其看起来与此类似:

KieHelper kieHelper = new KieHelper();
for (String ruleId : drls.keySet()) {
kieHelper.addContent(drls.get(ruleId), ResourceType.DRL);
}
Results results = kieHelper.verify();
for (Message message : results.getMessages()) {
log.error(">> Message ({}): {}", message.getLevel(), message.getText());
}

if (results.hasMessages(Message.Level.ERROR)) {
throw new IllegalStateException("There are errors in the KB.");
}

KieSession ksession = kieHelper.build().newKieSession();

希望对你有帮助

关于java - 从 Drools 6.0.1 迁移到 Drools 6.3.0-Final 出现意外的全局 [log] 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36005071/

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