如何解决Drools KieContainer 返回 null KieSession
KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer("droolspoc");
KieSession kieSession = kieContainer.newKieSession("HelloWorld");
kieSession.addEventListener(new DebugAgendaEventListener());
kieSession.addEventListener(new DebugRuleRuntimeEventListener());
// Create the fact
final Message message = new Message("Hello World",Message.HELLO);
kieSession.insert(message);
kieSession.fireAllRules();
kieContainer.newKieSession 总是返回 null。我发现了一些关于会话需要 XML 配置文件的讨论。示例中没有提到这些。
我在我的类路径中添加了一个 kmodule.xml 文件,其中包含这个。
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<kbase name="droolspoc" packages="rules">
<ksession name="HelloWorld"/>
</kbase>
</kmodule>
我仍然得到一个空会话。我错过了什么吗?
解决方法
Select an authentication method for 'https://github.com/':
1. Web browser (default)
2. Personal access token
文件需要位于类路径上名为 kmodule.xml
的文件夹中。
如果这是一个 Maven 项目,那么您希望 XML 文件位于 META-INF
。如果使用其他构建系统或手动配置类路径,请确保 META-INF 路径存在。
另请注意,src/main/resources/META-INF/kmodule.xml
定义中描述的规则包与类路径根相关,而不是与 kbase
相关。因此,如果您将 kbase 描述为 META-INF
,那么您的规则文件应位于 <kbase name="foo" packages="rules.foo.fun">
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。