我正在把一些业务规则放入drool工程中。我们不能使用KIE工作区UI来编写规则。所以这是出局了。
我的问题是我无法使这个工作。代码运行良好,但我无法看到drl文件被写入。在调试模式下,我可以看到具有正确drl结构的字符串对象。以前有人遇到过这个问题吗?
我在github上看到了一些例子,人们已经完成了在spring Boot中集成drools的yoman工作。我可以从构建我的服务开始,但我需要确保这是可能的
下面的代码将帮助您使用code创建drool规则。这不是推荐的方法,大多数人使用kie-web界面来设计和修改drool规则。不知道如何修改已经创建的。DRL文件。但这给了我一个开始
包com.sample.model;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import org.drools.compiler.lang.DrlDumper;
import org.drools.compiler.lang.api.DescrFactory;
import org.drools.compiler.lang.api.PackageDescrBuilder;
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.Message;
import org.kie.api.builder.ReleaseId;
import org.kie.api.io.Resource;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieContainer;
//@SuppressWarnings("restriction")
public class GenerateRule {
public static void main(String[] args) {
// TODO Auto-generated method stub
KieContainer container=build(KieServices.Factory.get());
System.out.println(container.getReleaseId());
System.out.println(container.getKieBase());
}
public static KieContainer build(KieServices kieServices){
KieFileSystem fileSystem=kieServices.newKieFileSystem();
ReleaseId releaseId=kieServices.newReleaseId("com.example.rulesengine",
"model-test", "1.0-SNAPSHOT");
fileSystem.generateAndWritePomXML(releaseId);
//fileSystem.write("D:/workspace/DroolSamples/src/main/resources/rules/rules.drl", getResource(kieServices, "D:/workspace/DroolSamples/src/main/resources/rules/rules.drl"));
addRule(fileSystem);
KieBuilder kieBuilder = kieServices.newKieBuilder(fileSystem);
kieBuilder.buildAll();
if (kieBuilder.getResults().hasMessages(Message.Level.ERROR)) {
throw new RuntimeException("Build Errors:\n" +
kieBuilder.getResults().toString());
}
return kieServices.newKieContainer(releaseId);
}
@SuppressWarnings("restriction")
private static void addRule(KieFileSystem kieFileSystem) {
PackageDescrBuilder packageDescrBuilder = DescrFactory.newPackage();
packageDescrBuilder
.name("com.sample.model")
.newRule()
.name("Is of valid age")
.lhs()
.pattern("Person").constraint("age < 18")
.id("$a", true).end()
//.pattern().id("$a", false).end()
.end()
.rhs("$a.setShowBanner( false );")
//.rhs("insert(new Person())")
.end();
String rules = new DrlDumper().dump(packageDescrBuilder.getDescr());
KieFileSystem fileSystem=kieFileSystem.write("D:/newrule.drl", rules);
try{
// create new file
File file = new File("src/main/resources/rules/test.drl");
file.createNewFile();
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(rules);
// close connection
bw.close();
System.out.println("File Created Successfully");
}catch(Exception e){
System.out.println(e);
}
}
private static Resource getResource(KieServices kieServices, String resourcePath) {
try {
// InputStream is = com.google.common.io.Resources.getResource(resourcePath).openStream(); //guava
InputStream is=new FileInputStream(new File(resourcePath));
return kieServices.getResources()
.newInputStreamResource(is)
.setResourceType(ResourceType.DRL);
} catch (IOException e) {
throw new RuntimeException("Failed to load drools resource file.", e);
}
}
}
我试图将我的流程变量放入业务规则任务中,并在该任务中更改该变量,但值保持不变。我做错了什么?流程是在kie工作台中开发的,不使用Eclipse。 在触发规则之前,我的变量在脚本任务中初始化,如 谢谢你的帮助!
我对商业规则的世界还很陌生,但我想我已经理解了Drools Expert和Drools Guvnor的概念,但我仍然有点困惑,与Expert相比,到底是如何/何时/为什么使用Guvnor的。而且,无论他们是相互排斥,还是有能力,甚至更愿意并肩工作。下面是一些让我感到困惑的突出主题,以及我关注的问题背后的一些解释,主要集中在应用程序的可维护性上。 Guvnor是否具有Expert plus more
任何关于这个或者如何使用drools api修改drools规则的想法都将是有用的。 注意:我不想为修改规则做字符串替换。
简而言之,我希望在运行时从规则库中创建、编辑和删除规则。我很难弄清楚如何在Drools6+中做到这一点。
想想有没有一种方法可以使用Drools API将drl文件转换为excel工作表? 我们目前使用的是Drools 5.3,但实际上可以使用任何版本。 提前感谢
我对流口水还很陌生,可能正在做一些非常愚蠢的事情。问题是,出于某种原因,我的口水规则没有被解雇。使用的drools版本为5.4 如果有帮助,当我转换回并使用执行方法来触发规则时,规则会触发。但是,我需要使用来过滤规则,并且我了解还不支持议程过滤器。作为第一步,我只是将会话翻转到,插入事实并触发所有规则。 不得不谦恭地说,在过去几天里,我在这件事上伤了头。太糟糕了,文档对drools来说不是那么友好