我在 Scala 中使用以下代码块来创建一个 KieContainer,并从中创建一个新的 KieSession:
val kieSession = DroolsMgt.getKieSession(List("myFile.drl"), Boot.kieServices){
val kfs = kieServices.newKieFileSystem()
for (filename <- drlFiles) {
val fis = new FileInputStream(filename)
kfs.write(filename, kieServices.getResources.newInputStreamResource(fis))
}
val kieBuilder = kieServices.newKieBuilder(kfs).buildAll()
val kieContainer = kieServices.newKieContainer(kieServices.getRepository.getDefaultReleaseId)
kieContainer.newKieSession()
}
此代码在仅 Drools 的项目中运行时运行良好,但是现在我将其集成到涉及 Actor 系统等的更大项目中。null
尝试将我的 drl 文件用作资源时,我得到了一个价值通过调用kieServices.getResources.newInputStreamResource(fis)
.
结果,没有文件被加载到我的 KieContainer 中,也没有在 KieBase 中创建任何 KiePackage,这意味着任何时候都不会触发任何规则(即使是没有“何时”条件的空白规则)。
什么可能导致 KieResources 返回 null?是否有任何依赖项或导入需要注意?
编辑:我还在运行以下代码来验证正在读取的 DRL 文件的内容。它按预期打印出来,但资源最终仍然是 a null
。
println("FIS Contents =\t" + sBuilder.toString())
val source = scala.io.Source.fromFile(filename)
println("DRL Source = \n")
source.getLines().foreach(x => println(x))
source.close()
val fisResource = kieResources.newInputStreamResource(fis)
println("Resource = \t" + fisResource)