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

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

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

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

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

rule ""  when  then  end 

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

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

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

希望这可以帮助。

您可以使用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); } } } 

另一种选择是从工厂开始使用“descr”API:

 org.drools.compiler.lang.api.DescrFactory 

这些API构建了Drools AST,它可以绕过解析器直接传递给编译器。 AST也可用于使用辅助类org.drools.compiler.lang.DrlDumper重新创建DRL。

标准工具不生成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

Decesion表对我有用,或者您可以尝试使用新的Drools工作台。

我使用了DrlDescr转储方法,但它没有更新drl文件,有没有人知道为什么?

代码: – pkg1.addRule(规则); 的System.out.println(dDump.dump(以pkg1));

即使我使用了@ apandey846建议的相同实现。 我想再添加一件事:如果要导入所需的类,可以按如下方式进行:

  PackageDescr pkg = DescrFactory.newPackage() .newImport("classname").target().end() .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(); 

要在LHS中添加多个条件,您可以执行以下操作:

  pattern("eval").constraint("condition1").end(). pattern("eval").constraint("condition2").end(). pattern("eval").constraint("condition3").end(). 

希望能帮助到你.. :)