是否可以动态运行Drools规则?

时间:2016-02-01 19:49:34

标签: java drools

我的drl文件中有以下内容

rule 1
  when
    ...
  then
    ...
end

rule 2
  when
    ...
  then
    ...
end

....

rule 40
  when
    ...
  then
    ...
end

我要做的是按照我想要的顺序执行规则。例如 先40秒然后39秒......依此类推。 我读到了关于显着性,但显着性的价值很难确定。我怎样才能按照我想要的顺序阅读规则?

1 个答案:

答案 0 :(得分:3)

Drools支持动态显着性。您可以根据传入数据中的任何表达式来定义它:

检查Role Attributes doc

但基本上你可以定义一个在上下文中注入的全局变量(数组或映射),然后根据它定义显着性。例如:

rule 1
  salience( ruleOrders[1] )
  when
    ...
  then
    ...
end

rule 2
  salience( ruleOrders[2] )
  when
    ...
  then
    ...
end

....

rule 40
  salience( ruleOrders[40] )
  when
    ...
  then
    ...
end

如果以某种方式从那里获得每个规则的顺序,您也可以使用绑定变量:

rule 1
  salience( $order )
  when
    Element( $order : order )
  then
    ...
end