droolsfiddle / drools-fiddle

The fiddle for Drools
Apache License 2.0
30 stars 25 forks source link

[BUG] Binding variable #13

Open AmielPouzat opened 6 years ago

AmielPouzat commented 6 years ago

The method eval(boolean isn't working on drools-fiddle. Only eval(true) and eval(false) are working.

DRL :

//
// copy paste your drl
// Drools version : 7.10.0.Final

import org.droolsfiddle.utilities.WSLogger;

global WSLogger LOGGER; // for fiddle

declare Fact
    value : int
end

rule "Rule"
    when
        $f : Fact($v : value)
        eval($v == 0)
    then
        LOGGER.info("Ok"); //for fiddle
        //System.out.println("Ok"); //for local
    end

drools-fiddle server : "ERROR: rule evaluation error java.lang.RuntimeException: org.drools.core.rule.EvalCondition$SafeEvalExpression@1d04d97b : java.lang.RuntimeException: java.lang.RuntimeException: Error writing method evaluate"

local : "ok "

AmielPouzat commented 6 years ago

It is because in the eval method, I used an binding object $v. The very issue is to use a binding variable in drools-fiddle. Example :

//
// Drools version : 7.10.0.Final

package org.droolsfiddle;

import org.droolsfiddle.utilities.WSLogger;

global WSLogger LOGGER;

declare Fact
    value : int
end

rule "Rule"
    when
        Fact(v : value)
    then
        LOGGER.info("ERROR : " + v);
    end
AmielPouzat commented 6 years ago

If you use it in the same pattern, it is working.

// Drools version : 7.10.0.Final

package org.droolsfiddle;

import org.droolsfiddle.utilities.WSLogger;

global WSLogger LOGGER;

declare Fact
    value : int
end

rule "Rule"
    when
        Fact(v : value, v == 0)
    then
        LOGGER.info("NO ERROR :" );
    end