0

我在 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)
4

0 回答 0