Drools KieContainer returns null KieSession
Drools KieContainer returns null KieSession
我正在尝试 运行 Drools 文档中的示例。我有以下代码。
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总是returns空。我发现了一些关于会话需要 XML 配置文件的讨论。示例中提到了 None 个。
我在我的类路径中添加了一个 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>
我仍然收到空会话。我错过了什么吗?
kmodule.xml
文件需要位于类路径中名为 META-INF
的文件夹中。
如果这是一个 Maven 项目,您会因此希望 XML 文件位于 src/main/resources/META-INF/kmodule.xml
。如果使用其他构建系统或手动配置类路径,请确保 META-INF 路径存在。
另请注意,在您的 kbase
定义中描述的规则包是相对于类路径根的,而不是相对于 META-INF
。因此,如果您将 kbase 描述为 <kbase name="foo" packages="rules.foo.fun">
,那么您的规则文件应位于 <classpath>/rules/foo/fun
.
我正在尝试 运行 Drools 文档中的示例。我有以下代码。
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总是returns空。我发现了一些关于会话需要 XML 配置文件的讨论。示例中提到了 None 个。
我在我的类路径中添加了一个 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>
我仍然收到空会话。我错过了什么吗?
kmodule.xml
文件需要位于类路径中名为 META-INF
的文件夹中。
如果这是一个 Maven 项目,您会因此希望 XML 文件位于 src/main/resources/META-INF/kmodule.xml
。如果使用其他构建系统或手动配置类路径,请确保 META-INF 路径存在。
另请注意,在您的 kbase
定义中描述的规则包是相对于类路径根的,而不是相对于 META-INF
。因此,如果您将 kbase 描述为 <kbase name="foo" packages="rules.foo.fun">
,那么您的规则文件应位于 <classpath>/rules/foo/fun
.