如何确保KIE是否加载了drl文件

时间:2018-06-29 13:53:09

标签: drools

是否有任何快速方法以编程方式检查我们的Web应用程序中的drools库是否成功加载了DRL文件?顺便说一句,我正在使用流口水开发基于肥皂的Web服务。例如:列出特定时间存在于知识库中的所有规则名称,等等。 请帮忙。 这是我从centOS文件系统加载drl文件的工作:

String drlFile = "/tmp/conf/object.drl";
ks = KieServices.Factory.get();
KieFileSystem kfs = ks.newKieFileSystem();
FileInputStream fis = new FileInputStream( drlFile );
kfs.write("/Drools/Object.drl",ks.getResources().newInputStreamResource( fis ));
KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll();

1 个答案:

答案 0 :(得分:0)

检测构建错误的最简单方法是从 buildAll() 的结果中提取消息。

kieBuilder.getResults().hasMessages(Message.Level.ERROR)
or
kieBuilder.getResults().getMessages()

作为旁注*

我有一个类似的问题,即 buildAll() 没有读取我在 kfs 中写入的文件。集合中没有包的情况相同。

为了解决这个问题,我必须向 inputStream 添加一个特定的资源类型。 例如

kfs.write("/Drools/Object.drl",ks.getResources().newInputStreamResource( fis ).setResourceType(ResourceType.DRL));

用于确定我一直使用的 ksession 中的包。

ksession.getKieBase().getKiePackages()

为了检测我的构建器知道并加载的文件,我使用了这个

((MemoryKieModule)kb.getKieModule()).getFileNames()