drools中是否有API通过传递值动态创建drl文件?

bha*_*ram 9 java drools drools-guvnor kie

我知道如何使用所有方法在KIE工作台中创建DRL文件.但是我的问题是没有使用KIE工作台,我们可以使用我们所需的值创建.drl文件.如果有任何可能性,请建议我.同样的方式建议我任何API都与此有关.提前致谢.

apa*_*846 7

您可以使用Drools Fluent API.请尝试以下示例代码:

package com.sample;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;

import org.drools.lang.DrlDumper;
import org.drools.lang.api.DescrFactory;
import org.drools.lang.descr.PackageDescr;

@SuppressWarnings("restriction")
public class Drl_Creator {
    public static void main(String str[]){
        PackageDescr pkg = DescrFactory.newPackage()
                   .name("org.drools.example")
                   .newRule().name("Xyz")
                       .attribute("ruleflow-grou","bla")
                   .lhs()
                       .and()
                           .pattern("Foo").id( "$foo", false ).constraint("bar==baz").constraint("x>y").end()
                           .not().pattern("Bar").constraint("a+b==c").end().end()
                       .end()
                   .end()
                   .rhs( "System.out.println();" ).end()
                   .getDescr();
        DrlDumper dumper=new DrlDumper();
        String drl=dumper.dump(pkg);
        System.out.print(drl);
        try{
            // create new file
            File file = new File("src/main/rules/test.drl");
            file.createNewFile();
            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(drl);
            // close connection
            bw.close();
            System.out.println("File Created Successfully");
         }catch(Exception e){
             System.out.println(e);
         }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

我用两种不同的方式解释你的问题.

1.是否可以在不使用KIE工作台的情况下为Drools编写规则?

是的,它应该支持导入规则,所以您需要做的就是打开文本编辑器并开始输入.这些规则使用相当简单的语法编写为文本,您可以在大约1-2小时的阅读中找到它们.我不知道您的环境是什么样的,但应该有一种解析和导入新规则的机制.您编写的所有规则都将从文本编辑器开始,如下所示:

rule "<name>"
    <attribute>
when
    <conditional element>
then
    <action>
end
Run Code Online (Sandbox Code Playgroud)

您将添加条件和操作.当然,您必须知道您可以创建哪些条件仅限于您的环境以及操作.

2.是否可以创建规则并通过某种API以编程方式使用它们?

是的,我一直都在使用Java API进行处理.我们使用了两种类型的规则,静态和动态.静态条件具有预先设定的条件,并且被编写以反复执行相同的比较(LHS)并且在每次满足条件时执行相同的动作(RHS).动态创建是基于用户在创建时指定的一组简单对象类型和比较(LHS)而动态创建的.动作(RHS)是预先固定的,但是根据整体规则的使用需要选择使用.整个规则作为文本创建,然后传递到Drools解析器,然后添加到要评估的规则列表中.

希望这可以帮助.

  • 您能否添加有关选项 2 的更多详细信息?就像使用哪个库“将规则创建为文本,然后传递到 Drools 解析器,然后添加到要评估的规则列表中”。 (2认同)

Ste*_*eve 2

标准工具不生成 DRL 文件。相反,他们鼓励您使用在运行时应用于数据的模板。

您应该查看有关决策表(特殊结构的电子表格)的文档:

http://docs.jboss.org/drools/release/6.0.1.Final/drools-docs/html_single/#d0e4221

...和规则模板:

http://docs.jboss.org/drools/release/6.0.1.Final/drools-docs/html_single/#d0e4969