Access static field in LHS

110 views Asked by At

I defined a class with static fields and I wanna access the fields in left hand side of a rule. Is it possible?

Here is the class:

package cep.model;

public class Events {
    public static final int A = 1;
    public static final int B = 2;
    public static int getA() {
        return A;
    }

    public static int getB() {
        return B;
    }
}

and rule:

package cep.drl;
dialect  "mvel"
import cep.Event;
import cep.model.Events;

declare Event
@role(event)
@expires( 20s )
end

//A & B
rule "r001"
no-loop
    when
    $a : Event(typeId == Events.A)
    and $b : Event(typeId == Events.B)
    then
end

and after compilation using drools plugin:

Unable to Analyse Expression typeId == Events.A:
[Error: unable to resolve method using strict-mode: cep$Event.Events()]
[Near : {... typeId == Events.A ....}]
                       ^
[Line: 15, Column: 4] : [Rule name='r001']


Unable to Analyse Expression typeId == Events.B:
[Error: unable to resolve method using strict-mode: cep$Event.Events()]
[Near : {... typeId == Events.B ....}]
                       ^
[Line: 16, Column: 8] : [Rule name='r001']
1

There are 1 answers

0
JoseAntonio MartinezValdivia On

I think you must put the rule in this way, replace == to : to make a binding to Events.A

rule "r001"
no-loop
    when
    $a : Event(typeId : Events.A)
    and $b : Event(typeId == Events.B)
    then
end