有时候可以通过KieHelper来创建一个KieSession,例如

private KieSession createKieSessionFromDRL(String drl) {
    KieHelper kieHelper = new KieHelper();
    kieHelper.addContent(drl, ResourceType.DRL);

    Results results = kieHelper.verify();

    if (results.hasMessages(Message.Level.WARNING, Message.Level.ERROR)) {
        List<Message> messages = results.getMessages(Message.Level.WARNING, Message.Level.ERROR);
        for (Message message : messages) {
            System.out.println("Error: " + message.getText());
        }
        throw new IllegalStateException("Compilation errors were found. Check the logs.");
    }

    return kieHelper.build().newKieSession();
}

这个方法的实现很直接。它通过KieHelper来编译一个字符串形式规则。并且kieHelper可以在编译期间检查规则的错误,如果有错误的话,可以通过Results进行输出。如果没有错误的话,直接创建一个KieSession。

KieHelper工具类并不是Drools对外开房的API的一部分。这个类提供了一些很方便的可以省略很多模板代码的方式来创建KieSession。由于这个类并不是Kie-api(Drools中的一个依赖)的一部分,因此虽然其使用方便,但是当使用Drools最新的版本时有可能出现向后不兼容的问题(意思是,在最新的Drools版本中有可能会删除或者禁用掉这个类)

KieHelper这个类提供了很多不同的方法可以向KieContainer中添加资源(例如规则),然后验证,最终创建出一个KieContainer。对于KieHelper的一个经典使用方式的代码片段类似上面的代码片段。

KieHelper不仅仅用来单元或者继承测试。你的应用可以使用KieHelper以细粒度的(fine-grained)方式类控制你所需要加入到KieContainer中的资源。典型的使用场景例如:你可以通过KieHelper来向KieContainer中动态加载字符串形式的规则。



KieHelper插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.choupangxia.com/2021/06/07/kiehelper/