从drools 5(5.5.0.Final)到drools 6的升级过程

时间:2015-03-05 17:58:06

标签: java upgrade drools

我们希望从drools 5升级到6,但我们正在尝试首先评估将涉及哪种时间投资。我花了很多时间来梳理网络和文档,但是我无处可以找到关于将drools 5实现更新为drools 6的最低要求步骤的解释。它可能只是一个简单的问题取代图书馆,因为两者之间的差异似乎过于明显。

是否有人了解解释升级过程的文档,以便我们能够评估所需的时间投资并最终使用该文档来执行更新?

4 个答案:

答案 0 :(得分:3)

This文件部分解释了一些主要差异。

Drools 5和6之间的主要区别是:

  • PHREAK - 新模式匹配算法(不保证向后兼容)
  • 知识API由KIE A​​PI取代
  • 与CDI集成
  • 与Maven惯例保持一致的项目

因此您需要:

  1. 重新构建项目,使其遵循Maven约定并具有包含kmodule.xml文件的资源文件夹
  2. 在kmodule.xml中指定您的Drool资源
  3. 更改API调用以使用KIE A​​PI。
  4. 理论上,即使使用新的PHREAK算法,你的规则仍然应该像以前一样运行,但我问Mark Proctor一次是否保证与Rete向后兼容,他说没有。

答案 1 :(得分:0)

不是一个完整的答案,但是......除了您可能提前确定的任何计划工作之外,请做好准备:

  • 旧的实现留在代码中可能是为了兼容性 (导致混淆)
  • 6.0.1和6.1.0之间的主要差异
  • 一些规则可能会破坏(特别是如果你的bpmn集成在你的 项目)

答案 2 :(得分:0)

有一个可以使用的知识API Legacy5适配器,因此您可以保持api调用相同。

答案 3 :(得分:0)

在Mika'il提供的链接中,您可以有效地找到一些信息,显示5.x分支和6.x分支之间的主要差异。

例如,Knowledge API已被KIE A​​PI取代。因此,不要忘记在定义DRL规则中导入函数的Java类中更改RuleContext类的导入包。在5.x中,RuleContext类来自org.drools.runtime.rule包,而来自org.kie.api.runtime.rule包的6.x.

如果你忘记这样做,在编译你的DRL之前一切都会好起来的(在运行时)。在规则编译时,规则编译器将无法在方法的签名和DRL文件中声明的方法之间进行匹配。编译器错误消息特别难以理解,如: “YourClass类型中的方法警告(RuleContext,Object)不适用于参数(RuleContext,Account)”

乍一看,我们可以认为类Account不会从Object继承。当然,这很荒谬。事实上,问题是第一个参数不是来自Java方法和DRL导入函数的同一个包。

我在找到之前已经失去了很多时间。有时我们看不到最明显的事实。但是来自编译器的更好的信息会帮助我......