2016-12-01 7 views
1

Есть ли способ вернуть значение Integer, обновленное в правиле Drools. Я передаю строку в своем правиле. Я вижу, что мое правило работает, но я не получаю значение обновленной глобальной переменной. Вот мой Drools править файл:Глобальная переменная в правиле Drools

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 

Я также попытался это:. kcontext.getKieRuntime() setGlobal ("delayInSeconds", 10); но не повезло :(

Я знаю, что могу передать эту переменную, установив в POJO. Так что просто не хотел, чтобы подтвердить, есть ли способ, с помощью мы можем получить обновленные значения с использованием глобальной Integer. Пожалуйста, предложите.

ответ

2

Глобальные переменные являются различные виды вы можете прочитать их, вы можете использовать их почти как простые старые переменные, но. (!).

Любое обновление глобальной переменной должно быть сделано с помощью метода API KieRuntime.setGlobal()

В вашей правило, вы можете использовать

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

Вы не можете использовать обновление с глобальным - это не факт. Кроме того, правила не будут реагировать на изменение глобального. Используйте этот факт, если вам это нужно.

+0

Спасибо за ответ. Я просто использовал это kcontext.getKnowledgeRuntime(). SetGlobal («delay, 10»); Я напрямую обращался к переменной. Мне пришлось использовать kSession.getGlobal («delay»). – rishi