我知道如何使用所有方法在KIE工作台中创建DRL文件。但是我的问题是没有使用KIE工作台,我们可以使用我们要求的值创建 .drl 文件。如果有任何可能性,请建议我。同样的方式建议我任何API都与此有关。提前谢谢。
答案 0 :(得分:6)
我用两种不同的方式解释你的问题。
是的,它应该支持导入规则,所以您需要做的就是打开文本编辑器并开始输入。这些规则使用相当简单的语法编写为文本,您可以在大约1-2小时的阅读中找到它们。我不知道您的环境是什么样的,但应该有一种解析和导入新规则的机制。您编写的所有规则都将从文本编辑器开始,如下所示:
rule "<name>"
<attribute>
when
<conditional element>
then
<action>
end
您将添加条件和操作。当然,您必须知道您可以创建哪些条件仅限于您的环境以及操作。
是的,我一直都在使用Java API进行处理。我们使用了两种类型的规则,静态和动态。静态条件具有预先设定的条件,并且被编写以反复执行相同的比较(LHS)并且在每次满足条件时执行相同的动作(RHS)。动态创建是基于用户在创建时指定的一组简单对象类型和比较(LHS)而动态创建的。动作(RHS)是预先固定的,但是根据整体规则的使用需要选择使用。整个规则作为文本创建,然后传递到Drools解析器,然后添加到要评估的规则列表中。
希望这有帮助。
答案 1 :(得分:6)
您可以使用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);
}
}
}
答案 2 :(得分:4)
另一种选择是从工厂开始使用“descr”API:
org.drools.compiler.lang.api.DescrFactory
这些API构建了Drools AST,它可以直接传递给编译器,
绕过解析器。 AST还可用于重建DRL,使用
助手班org.drools.compiler.lang.DrlDumper
答案 3 :(得分: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
答案 4 :(得分:1)
即使我使用了@ 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().
希望它有所帮助.. :)
答案 5 :(得分:0)
Decesion表对我有用,或者您可以尝试使用新的Drools工作台。
我使用过DrlDescr转储方法,但它没有更新drl文件,有人知道为什么吗?
代码: - pkg1.addRule(规则); 的System.out.println(dDump.dump(以pkg1));