我正在尝试实施一个 PoC,以使用 Scala 语言在 Azure Databricks 上运行 Drools。我假设 Drools 没有等效的 python 客户端。我知道我已经测试过的其他可用的基于 BRE python 的框架。
尝试在 Scala notebook 中运行示例代码时,我不断收到以下异常。
我已经导入了所有必要的 Drools 库。
Drools 库版本:7.1.17.0-Final
Databricks:11.3 LTS(包括 Apache Spark 3.3.0、Scala 2.12)
有人可以告诉我做错了什么吗?
有人遇到过工作示例吗?
如有任何支持,我将不胜感激。
NoClassDefFoundError: Could not initialize class org.kie.internal.io.ResourceFactory$LazyHolder
import collection.JavaConverters._
import org.slf4j.ILoggerFactory
import org.kie.internal.io.ResourceFactory
import org.drools.core.impl.KnowledgeBaseFactory
import org.kie.api.io.ResourceType
import org.kie.api.runtime.KieSession
import org.kie.api.runtime.rule.RuleContext
import org.kie.internal.builder.KnowledgeBuilderFactory
import org.kie.api.internal.utils.ServiceRegistry
class SampleService {
val resource= ResourceFactory.newClassPathResource("sample.drl")
val kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder()
kbuilder.add(resource,ResourceType.DRL)
val kbase = KnowledgeBaseFactory.newKnowledgeBase()
kbase.addPackages(kbuilder.getKnowledgePackages())
def runAllRulesFor(): String = {
val session = kbase.newKieSession()
null
}
}
def result = new DroolsRuleService().runAllRulesForUDF;
println(result)
我建议使用没有反射依赖的 Drools 8,使用引擎的静态版本(没有反射)。
此外,在编译时而不是在运行时代码生成规则的可执行模型。
如果您可以提供上述内容的复制者,请随时在 drools-usage 邮件列表上分享以获得额外支持。