В настоящее время я начинаю работать с jbpm/drools и пытался изменить некоторые переменные процесса из моего DRL, используя «Задачу бизнес-правила». Я попробовал следующее с процессом, который объявил переменную «var» типа «MyCustomObject».
По результатам этого вопроса и этой рекомендации Я создал задачу, которая должна выполнять группу правил "testgroup" и имеет следующий сценарий onEntry:
kcontext.getKnowledgeRuntime().insert(kcontext.getProcessInstance());
Теперь мой ДХО выглядит так:
import mypackage.MyCustomObject;
import org.kie.api.runtime.process.WorkflowProcessInstance;
rule "generate object"
ruleflow-group "testgroup"
when
//some stuff applies
then
insert(new MyCustomObject());
end
rule "modify variable"
ruleflow-group "testgroup"
when
$process: WorkflowProcessInstance()
$obj: MyCustomObject()
then
WorkflowProcessInstance $p = (WorkflowProcessInstance)kcontext.getKieRuntime().getProcessInstance($process.getId());
$p.setVariable( "var", $obj);
System.out.println("Value of object in memory: "+$obj);
System.out.println("Value of object in variable:+$p.getVariable("var"));
retract($process);
end
После задачи бизнес-правил я разместил простую задачу-скрипт:
if(var != null) {
System.out.println("var: "+var);
} else{
System.out.println("var is null!");
}
Вывод, который я получаю сейчас (Примечание: MyCustomObject не переопределяет toString):
Значение объекта в памяти: MyCustomObject@XYZ
Значение объекта в переменной: MyCustomObject@XYZ
var имеет значение null!
На данный момент я понятия не имею, что пошло не так. Как следует из вывода, ProcessInstance в рабочей памяти правильно установил свою переменную, но значение отсутствует в самом процессе (следовательно, для доступа к другим узлам).
Дополнительная информация:
В настоящее время я использую рабочую среду версии 6.4.0.Final на JBoss EAP 6.4 и развертываю контейнеры на KieExecutionServer (6.4.0.Final), работающем на отдельном экземпляре EAP 6.4.
Любые предложения приветствуются.