Drools 4.0.7升级至7.61.0适配Java 11的迁移及代码转换问题
Drools 4.0.7 升级至7.61.0适配方案
迁移参考说明
Drools各版本的迭代变更点可以在官方版本发布说明中查询,你本次遇到的旧API废弃问题是5.x版本之后的架构调整导致的,原RuleBase系列API已被KIE(Knowledge Is Everything)标准化API完全替代,无需额外迁移工具即可完成适配。
旧代码等效替换
新依赖导入
你列出的旧导入类可全部替换为KIE API对应类:
import org.kie.api.KieBase; import org.kie.api.KieBaseConfiguration; import org.kie.api.KieServices; import org.kie.api.conf.EqualityBehaviorOption; import org.kie.api.definition.KiePackage; // 替代原org.drools.rule.Package import org.kie.api.definition.type.FactTemplate; // 替代原org.drools.facttemplates.FactTemplate
功能等效代码
原初始化RuleBase的逻辑可改写为如下实现,完全保留原有配置效果:
// 获取KIE服务单例入口 KieServices kieServices = KieServices.Factory.get(); // 初始化KieBase配置 KieBaseConfiguration kieBaseConf = kieServices.newKieBaseConfiguration(); // 等效原setAssertBehaviour(AssertBehaviour.EQUALITY):使用对象equals方法判断事实相等,而非对象身份 kieBaseConf.setOption(EqualityBehaviorOption.EQUALITY); // 等效原setShadowProxy(false):关闭事实对象的影子代理 kieBaseConf.setProperty("drools.shadowProxy", "false"); // 创建KieBase实例,完全替代原RuleBase的所有功能 KieBase kieBase = kieServices.newKieBase(kieBaseConf);
额外适配注意事项
- 原有.drl规则文件无需修改即可兼容7.61.0版本,规则包加载可通过
KieBase的addKiePackages()方法实现,逻辑与原RuleBase添加Package的方式一致。 - Java 11环境下需额外引入JAXB相关依赖,避免因Java 11移除原生JAXB模块导致运行报错。
内容的提问来源于stack exchange,提问作者Valsaraj Viswanathan
相关产品推荐
相关产品推荐

