Доступ к глобальным переменным процесса в scriptTask (jbpm5)

Я создал простое определение процесса в jBPM5 с помощью всего одной задачи сценария. Я хочу включить переменную global, скажем, count, то есть static в том смысле, что одно и то же значение используется в различных экземплярах процесса, однако оно не является константой, и каждый экземпляр может обновлять значение, например увеличивать его в первой задаче процесс. Из задачи сценария я хочу сделать эту модификацию (приращение) и распечатать ее на стандартный вывод. Как мне это сделать?


person Shyam    schedule 10.01.2012    source источник


Ответы (2)


System.out.println(количество); kcontext.setVariable("количество", количество + 1);

person Kris Verlaenen    schedule 10.01.2012
comment
Спасибо за ответ Крис! Однако это была моя ошибка, что я не указал точный сценарий, сейчас я исправил вопрос! Пожалуйста, дайте мне знать решение! - person Shyam; 11.01.2012

Я сам нашел ответ с некоторыми исследованиями, что нам нужно использовать kcontext.getKnowledgeRuntime().setVariable() и .getVariable() для установки и получения «статической» переменной, которая является общей для экземпляров процесса. Однако это приводит к другому вопросу: что произойдет, если scriptTask, использующий setVariable, будет вызываться одновременно несколькими экземплярами! Спасибо @KrisV! Без вашей помощи я бы не смог прийти к этому. :)

person Shyam    schedule 11.01.2012
comment
Обратите внимание, что вам не обязательно использовать .getVariable(name), поскольку переменные вводятся автоматически (но вы должны использовать .setVariable(), если хотите изменить значение). - person Kris Verlaenen; 31.01.2012
comment
Если вы говорите о глобальном, вам, вероятно, следует использовать kcontext.getKnowledgeRuntime().setGlobal(имя, значение). Если несколько экземпляров процесса попытаются записать глобальное значение, он просто использует самое последнее значение. Чтобы избежать условий гонки, в этом случае вы можете избегать использования нескольких потоков в одном и том же ksession. - person Kris Verlaenen; 31.01.2012