Drools 6.2如何从我自己的规则编辑器生成和部署DRL文件

时间:2015-04-30 15:20:20

标签: containers drools workbench kie

作为概念验证,我使用Drools工作台来创建数据对象和DRL文件。我创建了jar文件并部署到kie服务器(带容器)。全部通过工作台UI完成。我使用来自我的c#应用程序的KIE REST服务通过XML发布输入对象(使用批处理执行)来触发规则,我得到了我正在寻找的响应。

但在实际情况中,我们将拥有自己的规则编辑器(为了便于使用),可以根据现有对象的属性创建规则。一旦规则保存在我们的数据库中,我们的计划是生成DRL文件和数据对象。

我的问题是如何获取此DRL文件并将其构建为jar文件?

Kie容器需要一个包含数据对象和DRL文件的jar文件。有没有其他人做过类似的事情?

我正在尝试找到部署drools规则文件的最佳方法。其他替代方法可能是使用IKVM从drools jar文件生成dll并在我的应用程序中集成drools。

2 个答案:

答案 0 :(得分:2)

我认为之前已经提出并回答了这个问题,但是这里再次将代码编译成KieBase或KieSession。

public KieBase build( String drlPath ) throws Exception {
    KieServices kieServices = KieServices.Factory.get();
    KieFileSystem kfs = kieServices.newKieFileSystem();
    FileInputStream fis = new FileInputStream( drlPath );
    kfs.write( "src/main/resources/some.drl",
                kieServices.getResources().newInputStreamResource( fis ) );
    KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();
    Results results = kieBuilder.getResults();
    if( results.hasMessages( Message.Level.ERROR ) ){
        System.out.println( results.getMessages() );
        throw new IllegalStateException( "### errors ###" );
    }
    KieContainer kieContainer =
        kieServices.newKieContainer( kieServices.getRepository().getDefaultReleaseId() );

    KieBase kieBase = kieContainer.getKieBase();
    return kieBase;
}

答案 1 :(得分:0)

我最终使用IKVM将drools 6.2转换为.net dll。这是我创建的帖子,以展示如何做到这一点:

http://droolstonet.blogspot.com/2015/05/how-to-use-drools-62-in-net-using-ikvm.html