是否可以在 JBoss Drools 的同一程序中引用 .drl 和 .xls 的规则?
Is it possible to reference rules from both a .drl and .xls within the same program in JBoss Drools?
我正在通过 Drools 寻找规则应用程序用例的可能性。此时,我能够让 Drools 从 .xls
文件和 .drl
文件中独立引用规则集。但是,在我的例子中,有时规则不作为 .xls
文件存在,而是在 .drl
文件中进行编程。因此,我想知道在同一个程序执行中,是否可以根据特定输入条件使用这两个文件?例如,如果 State == "GA"
则使用 .xls
,否则如果
State == "FL"
然后使用 .drl
.
我已经阅读了不同的 KieConcepts 并在高层次上理解了它们,我相信我必须将每个规则文件创建为一个单独的 KieContainer,然后将它们加载到一个基于 definitions given to each here. 然而,当谈到这一步时,我对这是如何完成的感到困惑。我已经创建了两个单独的实例,我可以使用 KieBase 将这两个简单地组合到一个程序中吗?
.xls 实现
public static void main (String[] args) {
try {
KieServices ks = KieServices.Factory.get();
// add excel sheet to knowledge base
Resource dt = ResourceFactory.newClassPathResource("dtables/StateInterest.xls");
KieFileSystem kieFileSystem = ks.newKieFileSystem().write(dt);
KieBuilder kieBuilder = ks.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieRepository kieRepository = ks.getRepository();
ReleaseId krDefaultReleaseID = kieRepository.getDefaultReleaseId();
KieContainer kieContainer = ks.newKieContainer(krDefaultReleaseID);
KieSession kSession = kieContainer.newKieSession();
// go !
StateInterestRequest stateInterestRequest = new StateInterestRequest();
stateInterestRequest.setPolicyIssueState("GA");
stateInterestRequest.setPolicyIssueDate("10/2018");
kSession.insert(stateInterestRequest);
kSession.fireAllRules();
.drl 实现
public static final void main(String[] args) {
try {
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
// go !
StateInterestRequest stateInterestRequest = new StateInterestRequest();
stateInterestRequest.setPolicyIssueState("FL");
stateInterestRequest.setPolicyIssueDate("2008-03-04");
kSession.insert(stateInterestRequest);
kSession.fireAllRules();
作为附录,如果可能的话,这是通过最终组合程序的 main()
还是在规则本身内完成的?
是的,您可以将两种类型的文件合并到一个项目中。您可以编写 xls 格式的规则,这将匹配州 "GA" 和在 DRL 文件中编写的规则,这将匹配其他州。我建议先阅读 Drools 文档,这样您就可以了解规则、KJars 等 [1] 的基本概念。我认为本章可能对您有所帮助 [2]。
[1] https://docs.jboss.org/drools/release/7.16.0.Final/drools-docs/html_single/index.html
[2] https://docs.jboss.org/drools/release/7.16.0.Final/drools-docs/html_single/index.html#_builddeployutilizeandrunsection
我正在通过 Drools 寻找规则应用程序用例的可能性。此时,我能够让 Drools 从 .xls
文件和 .drl
文件中独立引用规则集。但是,在我的例子中,有时规则不作为 .xls
文件存在,而是在 .drl
文件中进行编程。因此,我想知道在同一个程序执行中,是否可以根据特定输入条件使用这两个文件?例如,如果 State == "GA"
则使用 .xls
,否则如果
State == "FL"
然后使用 .drl
.
我已经阅读了不同的 KieConcepts 并在高层次上理解了它们,我相信我必须将每个规则文件创建为一个单独的 KieContainer,然后将它们加载到一个基于 definitions given to each here. 然而,当谈到这一步时,我对这是如何完成的感到困惑。我已经创建了两个单独的实例,我可以使用 KieBase 将这两个简单地组合到一个程序中吗?
.xls 实现
public static void main (String[] args) {
try {
KieServices ks = KieServices.Factory.get();
// add excel sheet to knowledge base
Resource dt = ResourceFactory.newClassPathResource("dtables/StateInterest.xls");
KieFileSystem kieFileSystem = ks.newKieFileSystem().write(dt);
KieBuilder kieBuilder = ks.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieRepository kieRepository = ks.getRepository();
ReleaseId krDefaultReleaseID = kieRepository.getDefaultReleaseId();
KieContainer kieContainer = ks.newKieContainer(krDefaultReleaseID);
KieSession kSession = kieContainer.newKieSession();
// go !
StateInterestRequest stateInterestRequest = new StateInterestRequest();
stateInterestRequest.setPolicyIssueState("GA");
stateInterestRequest.setPolicyIssueDate("10/2018");
kSession.insert(stateInterestRequest);
kSession.fireAllRules();
.drl 实现
public static final void main(String[] args) {
try {
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
// go !
StateInterestRequest stateInterestRequest = new StateInterestRequest();
stateInterestRequest.setPolicyIssueState("FL");
stateInterestRequest.setPolicyIssueDate("2008-03-04");
kSession.insert(stateInterestRequest);
kSession.fireAllRules();
作为附录,如果可能的话,这是通过最终组合程序的 main()
还是在规则本身内完成的?
是的,您可以将两种类型的文件合并到一个项目中。您可以编写 xls 格式的规则,这将匹配州 "GA" 和在 DRL 文件中编写的规则,这将匹配其他州。我建议先阅读 Drools 文档,这样您就可以了解规则、KJars 等 [1] 的基本概念。我认为本章可能对您有所帮助 [2]。
[1] https://docs.jboss.org/drools/release/7.16.0.Final/drools-docs/html_single/index.html
[2] https://docs.jboss.org/drools/release/7.16.0.Final/drools-docs/html_single/index.html#_builddeployutilizeandrunsection