[rules-users] Modify a global variable with mvel dialect
Joshua Jackson
joshua.java at gmail.com
Mon Feb 4 22:53:27 EST 2008
Dear all,
How do we modify a global variable with mvel dialect inside rules file
without getting
java.lang.UnsupportedOperationException: External Variable
identifer='allowance' type='class java.lang.Double' is final, it
cannot be set
[testng] at org.drools.base.mvel.DroolsMVELGlobalVariable.setValue(DroolsMVELGlobalVariable.java:37)
[testng] at
org.drools.base.mvel.DroolsMVELFactory.createVariable(DroolsMVELFactory.java:199)
[testng] at
org.mvel.ast.AssignmentNode.getReducedValueAccelerated(AssignmentNode.java:80)
[testng] at org.mvel.MVELRuntime.execute(MVELRuntime.java:88)
[testng] at
org.mvel.CompiledExpression.getValue(CompiledExpression.java:108)
[testng] at org.mvel.MVEL.executeExpression(MVEL.java:230)
[testng] at
org.drools.base.mvel.MVELConsequence.evaluate(MVELConsequence.java:47)
[testng] at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:550)
[testng] at
org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:514)
[testng] at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:462)
[testng] at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:424)
This is how I did it:
Java file:
public void run(){
Double allowance = new Double(0);
workingMemory.setGlobal("allowance", allowance);
workingMemory.fireAllRules();
}
Rules:
global Double allowance
dialect "mvel"
rule "Has Wife"
no-loop
salience 20
when
e: Employee()
income:Income()
eval( e.isWife() )
then
System.out.println("Has Wife");
allowance = allowance + 5000;
end
This works if I use java as the dialect.
Have I missed something?
Thanks in advance,
--
It's not going to be like this forever
Blog: http://joshuajava.wordpress.com/
More information about the rules-users
mailing list