简体   繁体   中英

Global variable in Drools rule

Is there any way I can get back the Integer value updated in Drools rule. I am passing the string in my rule. I can see my rule running but I am not getting the updated global variable's value. Here is my Drools rule file :

import com.MessageType;

global java.lang.Integer delayInSeconds;

rule "Delay for Update"
when 
String(this == MessageType.UPDATE.getType())
then
System.out.println("Running delay rule.....");
delayInSeconds = 10;
update(delayInSeconds); // This gives me runtime error. If I remove it I dont get error but dont get updated value.
end

I have also tried this : kcontext.getKieRuntime().setGlobal("delayInSeconds" , 10); but no luck :(

I know I can pass this variable by setting in POJO. So just wanted to confirm if there is any way by we can get updated value using global Integer. Please suggest.

Global variables are a different species. You can read them, you can use them almost (!) like plain old variables, but:

Any update of a global variable must be done via the API method KieRuntime.setGlobal() .

In your rule, you could use

drools.setGlobal( delayInSeconds, Integer.valueOf(10) );

You cannot use update with a global - it is not a fact. Also, rules will not react to a change of a global. Use a fact if you need this.

For me this worked

drools.getKnowledgeRuntime().setGlobal(String, Object);

Eg.

drools.getKnowledgeRuntime().setGlobal("delayInSeconds", Integer.valueOf(10));

You can use.

then
   System.out.println("Running delay rule.....");  
   delayInSeconds = "whatever calculations";
   drools.getKnowledgeRuntime().setGlobal("delayInSeconds", delayInSeconds);
end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM