вторник, 18 августа 2009 г.

JBPM - часть 4 - язык описания процессов JPDL.

jPDL – язык исполнения процессов с великолепными возможностями моделирования, прозрачной интеграцией с Java и великолепными возможностями управления заданиями. Цитата с сайта JPDL .

Посмотрим чуть более подробно какие возможности предоставляет язык. Описание процесса представляет собой xml файл. Теги и их назначение сейчас и будет разобрано.


Действия, отвечающие за управление потоком исполнения процесса.


1 <process> - начальный тег описания процесса.

2 Действия, управляющие потоком исполнения:
2.1 <start
> Указывает точку входа процесса. Она должна быть только одна и только один переход может указываться внутри нее.


2.2 <state> Действие, означающее ожидание вызова внешнего тригера, который будет предоставлен через JBPM API. Данное действие не содержит никаких атрибутов или внутренних элементов. Есть две разновидности этого типа: последовательность (state sequence) и выбор (state choice). Отличие в том, что в первом случае указывается лишь один transition внутри state, а во втором их может быть несколько. В зависимости от того, что вернет внешний тригер будет выбрана та или иная ветка исполнения.

Примеры обоих вариантов:
1) sequence of states




signalExecutionById(executionInA.getId()) - это как раз метод инициирующий вызов внешнего тригера.

2) state choice




Здесь указывается по какой ветке будет переход (строчка "accept").

2.3 <decision>
Имеет несколько исходящих переходов. Когда достигается данное действие, то автоматически вычисляется какой из переходов будет выбран для дальнейшего исполнения процесса.
Возможны три варианта использования этого действия:


2.3.1 Decision conditions.
В этом случае внутри каждого перехода указывается condition (условие). Выбирается тот переход для которого либо выполнено условие, указанное в нем, либо переход без условий.

content - параметр, передающийся в процесс при его запуске.

2.3.2 Decision expression
Аналогично предыдущему, но выражение вычисляется на уровне decision, результат вычисления - строка, сравнивается с возможными переходами.


2.3.3 Decision handler
Это Java класс, который реализует интерфейс DecisionHandler, где программно можно определить в какую сторону пойдет дальнейшее выполнение процесса.



2.4 concurrency
С помощью элементов fork и join можно добиться параллельного выполнения действий. В join могут заходить несколько переходов, что и дает параллельность.


2.5 <end>
Окончание исполнения. В общем случае при окончании ProcessInstance принудительно заканчиваются все параллельно выполняющиеся действия. Но можно указать, что окончиться должно только то "исполнение" execution, которое достигло конца, а остальные должны продолжиться. Для этого есть атрибут ends у тега end.

ends{processinstance|execution}
Так же возможны множественные end в конце процесса. Еще можно с помощью атрибута state типизировать окончания.

2.6 <task>
Создание задач для пользователей.


2.7 <sub-process>
JBPM позволяет определять общие процессы в отдельных файлах и запускать их из других процессов с помощью данного тега. В подпроцесс можно передавать параметры через механизм переменных.



2.8 <сustom>
Позволяет использовать пользовательский код. Классы, реализующие ExternalActivityBehaviour.



Я рассмотрел действия, отвечающие за управление потоком исполнения процесса. Так же есть ряд "автоматических" действий: java, script, hql, sql, mail.
Их я не буду рассматривать в этой статье, чтобы не перегружать ее. Вернусь к ним позднее. На этом краткий обзор языка jPDL закончен. В следующей статье разберу как интегрировать JBPM со Spring и Hibernate.


p.s. Примеры xml описаний взяты из официальной документации движка.






Комментариев нет:

Отправить комментарий