1

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

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

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

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

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

4

2 回答 2

2

我认为这已经被问过并回答过,但这里再一次,将 DRL 编译成 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;
}
于 2015-04-30T15:34:33.303 回答
0

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

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

于 2015-05-19T19:30:05.390 回答