Я создал простое определение процесса в jBPM5 с помощью всего одной задачи сценария. Я хочу включить переменную global
, скажем, count
, то есть static
в том смысле, что одно и то же значение используется в различных экземплярах процесса, однако оно не является константой, и каждый экземпляр может обновлять значение, например увеличивать его в первой задаче процесс. Из задачи сценария я хочу сделать эту модификацию (приращение) и распечатать ее на стандартный вывод. Как мне это сделать?
Доступ к глобальным переменным процесса в scriptTask (jbpm5)
Ответы (2)
System.out.println(количество); kcontext.setVariable("количество", количество + 1);
person
Kris Verlaenen
schedule
10.01.2012
Спасибо за ответ Крис! Однако это была моя ошибка, что я не указал точный сценарий, сейчас я исправил вопрос! Пожалуйста, дайте мне знать решение!
- person Shyam; 11.01.2012
Я сам нашел ответ с некоторыми исследованиями, что нам нужно использовать kcontext.getKnowledgeRuntime().setVariable()
и .getVariable()
для установки и получения «статической» переменной, которая является общей для экземпляров процесса. Однако это приводит к другому вопросу: что произойдет, если scriptTask
, использующий setVariable
, будет вызываться одновременно несколькими экземплярами! Спасибо @KrisV! Без вашей помощи я бы не смог прийти к этому. :)
person
Shyam
schedule
11.01.2012
Обратите внимание, что вам не обязательно использовать .getVariable(name), поскольку переменные вводятся автоматически (но вы должны использовать .setVariable(), если хотите изменить значение).
- person Kris Verlaenen; 31.01.2012
Если вы говорите о глобальном, вам, вероятно, следует использовать kcontext.getKnowledgeRuntime().setGlobal(имя, значение). Если несколько экземпляров процесса попытаются записать глобальное значение, он просто использует самое последнее значение. Чтобы избежать условий гонки, в этом случае вы можете избегать использования нескольких потоков в одном и том же ksession.
- person Kris Verlaenen; 31.01.2012