Drools 6.0 dynamically load rules at runtime

后端 未结 3 564

I want to load a drl file at runtime. The posts I\'ve found including this one work for version 5.0 but I can\'t figure out how to do it for drools version 6.0.

3条回答
  •  难免孤独
    2020-12-30 17:47

    I used info taken from those two docs:

    • https://docs.jboss.org/drools/release/6.0.1.Final/drools-docs/html_single/#d0e109
    • https://github.com/droolsjbpm/drools/blob/master/drools-compiler/src/test/java/org/drools/compiler/CommonTestMethodBase.java

    I've came out with this snippet that loads rules defined in the /drl/file/path file into the stateful session you obtain at the last line.

        File path = new File("/drl/file/path");
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
        kbuilder.add(ResourceFactory.newFileResource(path), ResourceType.DRL);
        if (kbuilder.hasErrors()) {
            throw new RuntimeException("Errors: " + kbuilder.getErrors());
        }
        kbase = KnowledgeBaseFactory.newKnowledgeBase();
        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
    

    Some methods are deprecated, so, don't expect this solution to be valid in the following releases.

    Please, double check the imports, they are all from org.kie, not from drools packages. I admit those imports are too much, but I'm pasting the code from an example I'm trying to develop, so I have more things on my code, sorry for that.

    import java.io.File;

    import org.kie.api.KieServices;
    import org.kie.api.builder.KieBuilder;
    import org.kie.api.builder.KieFileSystem;
    import org.kie.api.builder.KieScanner;
    import org.kie.api.builder.ReleaseId;
    import org.kie.api.builder.model.KieBaseModel;
    import org.kie.api.builder.model.KieModuleModel;
    import org.kie.api.builder.model.KieSessionModel;
    import org.kie.api.conf.EqualityBehaviorOption;
    import org.kie.api.conf.EventProcessingOption;
    import org.kie.api.io.Resource;
    import org.kie.api.io.ResourceType;
    import org.kie.api.runtime.KieContainer;
    import org.kie.api.runtime.conf.ClockTypeOption;
    import org.kie.internal.KnowledgeBase;
    import org.kie.internal.KnowledgeBaseFactory;
    import org.kie.internal.builder.KnowledgeBuilder;
    import org.kie.internal.builder.KnowledgeBuilderFactory;
    import org.kie.internal.io.ResourceFactory;
    import org.kie.internal.runtime.StatefulKnowledgeSession;
    

    Hope it helps.

提交回复
热议问题