Java 在JBoss Drools的同一个程序中,是否可以引用.drl和.xls中的规则?

Java 在JBoss Drools的同一个程序中,是否可以引用.drl和.xls中的规则?,java,drools,Java,Drools,我正在寻找Drools作为规则应用程序用例的可能性。我能够让Drools在此时独立地引用.xls文件和.drl文件中的规则集。但是,在我的例子中,有时规则不作为.xls文件存在,而是在.drl文件中编程。因此,我想知道在同一个程序执行中,是否可以根据特定的输入条件使用这两个文件?例如,如果State==GA,则使用.xls,否则如果 State==FL,然后使用.drl 我已经阅读了不同的KIE概念,并从较高的层次上理解了它们,我相信我必须将每个规则文件创建为一个单独的KIE容器,然后根据将它们

我正在寻找Drools作为规则应用程序用例的可能性。我能够让Drools在此时独立地引用.xls文件和.drl文件中的规则集。但是,在我的例子中,有时规则不作为.xls文件存在,而是在.drl文件中编程。因此,我想知道在同一个程序执行中,是否可以根据特定的输入条件使用这两个文件?例如,如果State==GA,则使用.xls,否则如果 State==FL,然后使用.drl

我已经阅读了不同的KIE概念,并从较高的层次上理解了它们,我相信我必须将每个规则文件创建为一个单独的KIE容器,然后根据将它们加载到单个KieBase中。然而,当涉及到这一步时,我对如何完成感到困惑。我已经创建了两个独立的实例,我是否能够使用KieBase将这两个实例简单地合并到一个程序中

.xls实现

.drl实现


作为附录,如果可能,这是通过最终合并程序的主要部分实现的,还是在规则本身内实现的?

是的,您可以在一个项目中合并这两种类型的文件。您可以使用xls格式编写规则,该格式将匹配状态GA,而使用DRL文件编写的规则将匹配其他状态。我建议您先阅读Drools文档,以便了解规则、KJars等的基本概念[1]。我认为这一章可能对你有所帮助[2]

[1] [2]

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();
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();