Search code examples
javafunctiondrools

Drools functions


Recently I'm working with drools and I want to make some special checks on some objects. I need to use functions in the when section of the rule, but I'm getting an error. Example:

function boolean newFunction(int a){
  if(a>0)
    return true;
  else
    return false;
}

rule "new rule"
salience 100
dialect "mvel"
when
  eval(newFunction(1))
then
  System.out.println("OK");
end

The error i get always is:

unable to resolve method using strict-mode: java.lang.Object.newFunction(java.lang.Integer)

Is there no support on drools for functions in whensection?

Thanks!


Solution

  • The short answer is: no.

    This is because the facts need to be in the working memory.

    What you can do, is to have a rule that takes all types of a certain class from the working memory, applies a function in the then section and inserts that new value in the working memory.

    edit

    This answer, originally posted on 2012, is not more relevant as newer versions of drools do support functions on the when clause.