在Optaplanner 6.2Fiinal中,Drools规则运算符匹配不起作用

时间:2016-08-16 03:21:26

标签: drools optaplanner drools-planner

我正在使用Optaplanner 6.2Final版本,除匹配运算符外,一切正常。 为了解释更多,这是我的规则。

rule "TEST REG EXP OPERATOR"
when
    $cheese:Cheese($cheese.type matches "(Buffulo)?\\S*Mozarella")
then
    scoreHolder.addSoftConstraintMatch(kcontext, 1);
end

以下是抛出的异常:

Exception in thread "main" [Error: unable to resolve method: com.app.test.domain.Cheese.$cheese() [arglength=0]]
[Near : {... $cheese.type ~= "(Buffulo)?\\S*Mozarella" ....}]

注意:如果我在类型前删除 $ cheese。声明,则规则没有问题。这很好用:

$cheese:Cheese($cheese.type == "Buffulo")

任何建议都将不胜感激。

更新 事实证明,在我检查完所有版本之后,以下仅在drools核心版本6.2.0.Final和6.3.0.Final上抛出异常。它正在使用其他版本。

$cheese:Cheese($cheese.type matches "(Buffulo)?\\S*Mozarella")

1 个答案:

答案 0 :(得分:0)

如果你想让它发挥作用:

  $cheese1:Cheese(type matches "(Buffulo)?\\SMozare‌​lla")
  $cheese2:Cheese($che‌​ese1.name matches "A.*", id>$cheese1.id)

您必须使用方法调用:

  $cheese1:Cheese(type matches "(Buffulo)?\\SMozare‌​lla")
  $cheese2:Cheese($che‌​ese1.getName() matches "A.*", id>$cheese1.getId())

这假设您一直遵循JavaBeans约定(如您所愿)。但更好的方法是使用

  $cheese1:Cheese(type matches "(Buffulo)?\\SMozare‌​lla",
                  name matches "A.*", $id1: id )
  $cheese2:Cheese( id > $id1 )