Drools 从KieBase和KieContainer创建KieSession有什么区别?

Drools 从KieBase和KieContainer创建KieSession有什么区别?,drools,rule-engine,Drools,Rule Engine,我正在尝试评估创建会话的最佳选项 选择1 kiebase.newKieSession(); 选择2 container=kieheloper.getKieContainer(); container.newKieSession() 我找不到这两个词之间的区别。有什么输入吗?正如JavaDoc中所解释的,它们是根本不同的 该方法返回此容器的默认会话。如果容器没有定义的默认会话,它将抛出RuntimeException 该方法将按照默认配置为此KieBase创建一个新的KieSession 由于

我正在尝试评估创建会话的最佳选项

选择1

kiebase.newKieSession();
选择2

container=kieheloper.getKieContainer();
container.newKieSession()

我找不到这两个词之间的区别。有什么输入吗?

正如JavaDoc中所解释的,它们是根本不同的

该方法返回此容器的默认会话。如果容器没有定义的默认会话,它将抛出RuntimeException

该方法将按照默认配置为此KieBase创建一个新的KieSession

由于KieContainer包含KieModule的所有KieBase,因此这两种方法可能都将解析为类似的KieSession。当然,您需要一个只包含单个KieBase的KieBase容器,并且容器的默认会话必须使用单个KieBase的默认配置会话进行初始化

考虑此配置(与问题无关的字段被省略,因此它显然不是有效的kmodule.xml):


在这里,如果我们调用
kieContainer.newKieSession()
,我们将返回名为“fooSession”的kieSession,因为它被配置为默认值。类似地,如果我们调用
kieBase.newKieSession()
并且
kieBase
是一个名为“foo”的会话,我们还将返回一个类似于“fooSession”的kieSession。但是如果
kieBase
是一个名为“bar”的会话,那么会话将类似于“barSession”


当要弄清楚口水的内脏是如何工作的时,除了文档之外,有时还可以查看一下。一开始有点复杂,但是如果从API(接口)开始,然后向后到实现,事情就开始变得有意义了。

正如JavaDoc中所解释的,它们是根本不同的

该方法返回此容器的默认会话。如果容器没有定义的默认会话,它将抛出RuntimeException

该方法将按照默认配置为此KieBase创建一个新的KieSession

由于KieContainer包含KieModule的所有KieBase,因此这两种方法可能都将解析为类似的KieSession。当然,您需要一个只包含单个KieBase的KieBase容器,并且容器的默认会话必须使用单个KieBase的默认配置会话进行初始化

考虑此配置(与问题无关的字段被省略,因此它显然不是有效的kmodule.xml):


在这里,如果我们调用
kieContainer.newKieSession()
,我们将返回名为“fooSession”的kieSession,因为它被配置为默认值。类似地,如果我们调用
kieBase.newKieSession()
并且
kieBase
是一个名为“foo”的会话,我们还将返回一个类似于“fooSession”的kieSession。但是如果
kieBase
是一个名为“bar”的会话,那么会话将类似于“barSession”

当要弄清楚口水的内脏是如何工作的时,除了文档之外,有时还可以查看一下。开始时有点复杂,但是如果您从API(接口)开始,然后反向工作到实现,事情就开始变得有意义了