вторник, 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 описаний взяты из официальной документации движка.






JBPM - часть 3 - Краткое описание запуска процессов в JBPM.

В двух предыдущих частях я дал общее описание JBPM, а так же как его развернуть под JBOSS.
Сейчас подробнее остановлюсь на том как деплоить и запускать процессы.

Общее представление о деплое и запуске процессов.

Важны три момента:
1. Доступ к JBPM идет через сервисы. Заявляется, что это одно из основных отличий от предыдущей версии движка.
Доступ к сервисам из приложения можно получить используя ProcessEngine, который ThreadSafe и его можно использовать через все приложение. Создается следующим образом:




2. Deploy процессов в jbpm.
Это процесс сохранения описания процесса в БД, которую использует JBPM. Для этого используется RepositoryService, получаемый через ProcessEngine.


3. Запуск нового экземпляра процесса.
Экземпляр процесса (Process Instance) -это отдельный поток исполнения описания процесса, для конкретных данных.
Запускается он через вызов метода сервиса ExecutionService:



тут есть несколько способов запуска:

a) последняя версия процесса



b) Специфичная версия процесса



с) С пользовательским ключом

При старте процесса можно указать ключ, уникальный для этого описания процесса. Потом к запущенному экземпляру процесса можно будет получить доступ через этот ключ {process-key}.{execution-id}.



В качестве такого ключа удобно использовать id объекта, участвующего в процессе. В таком случае можно легко узнать состояние процесса в любой момент его исполнения.

пятница, 14 августа 2009 г.

JBPM - часть 2 - установка и настройка.

Рассмотрим как установить и настроить для работы JBPM.
Я предполагаю, что читателю известны такие понятия как сборка, сервер приложений, сервлет-контейнер и т.п.

Что понадобится для запуска.
  • Ant (да-да, не naven, что меня тоже очень удивило)
  • JBoss. JBPM может быть развернут и под Tomcat, но по умолчанию идет простая интеграция с JBoss. Для развертывания под Tomcat нужно чуть больше действий руками. (Для любопытных, в моих следующих статьях jbpm будет развернут как раз под Tomcat 6.)
  • СУБД. Я предпочел PostgreSQL. Можно воспользоваться и HSQLDB с которой поставляется JBPM.
  • Драйвер для выбранной СУБД
  • дистриубтив JBPM

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

1. Распаковать дистрибутив в выбранную директорию. После развертывания дистрибутива, мы увидим следующую структуру каталогов:



Если предположить, что мы просто хотим запустить тестовый пример, то этого достаточно. Но мы хотим создать среду для дальнейшей разработки нашего собственного
проекта. Поэтому наши дальнейшие действия будут отличаться от мануала к тестовым примерам.

2. Установить JBOSS. Просто распаковать архив в выбранную директорию.

3. Установить ant. (если у вас его еще нет.)

4. Установить соответствующую СУБД

5. Создать в СУБД пользователя jbpm

6. Под пользователем jbpm создать базу jbpmdb

7. Создать таблицы в базе. Инициировать их тестовыми данными, чтобы можно было в последующем зайти в консоль. Для этого нужно испольнить две команды


8. Положить jdbc драйвер для СУБД в [jbpm home dir]/lib

9. Создать в директории
[jbpm home dir]/jboss файл build.properties
Этот шаг требует пояснения. Дело в том, что некоторые умолчания, используемые при сборке, нас не устраивают. По умолчанию считается что jboss установлен в директорию [jbpm home dir]/jboss-5.0.0.GA, что версия сервера 5.0.0.GA и СУБД HSQLDB. Создавая такой файл, мы переопределяем эти свойства сборки:


10. Инсталировать JBPM в JBOSS.
Для этого нужно исполнить команду



11. Запустить JBOSS.

После выполнения вышеописанных действий, под JBOSS будет запущено приложение JBPM, которое будет доступно через jndi. В нашем приложении мы сможем использовать JBPM именно через доступ по jndi. Имеется в виду, что получение объекта ProcessEngine (входная точка для работы c JBPM), будет осуществляться через следующую конструкцию:




Стоит отметить, что вместо файла build.properties все параметры можно указывать в командной строке, но мне это кажется неудобным, поэтому был выбран иной способ.

Вот собственно и вся установка JBPM.

JBPM - часть 1 - process management engine от JBOSS.

Аббревиатуру JBPM видели и слышали многие. До реальной работы с этой технологией у меня руки не доходили.
Но вот недавно вышла четвертая версия продукта и мне посчастливилось ее использовать.
Я начинаю цикл статей о JBPM 4. В этой я дам краткий обзор технологии.
В следующих материалах будут освещены вопросы создания приложения с использованием JBPM4, возможностей языка описания процессов JPDL, взаимодействия с JBPM через Spring.

JBPM - по своей сути является платформой, обеспечивающей исполнение процессов, описанных с использованием языков описания процессов.
Языков три: jPDL, BPEL и Pageflow.
  • jPDL - это собственная разработка JBOSS
  • BPEL - это стандарт описания процессов.
  • Pageflow понятно из названия, что это за процессы. Примером для последнего типа процессов может служить Tapestry.
На BPEL я останавливаться не буду, поскольку не использовал его.
JBPM позовляет автоматизировать исполнение процесса, представленного в виде xml описания(jPDL). Основные преимущества:

  1. Гарантируется сохранение состояния процесса в его промежуточной точке.
  2. Возможность асинхронного исполнения процессов.
  3. Версионность описания процесса
  4. Возможность использование листенеров на входе, выходе из узлов процесса и в других случаях.
  5. Заведение в системе пользователей, назначение им заданий и уже готовый gui отображающий их для каждого пользователя.
  6. Поддержка рассылки email сообщений о назначении пользователям заданий.
  7. Интерфейс администратора, позволяющий отслеживать состояния запущенных процессов и тех, что уже исполнились.
  8. Возможность использования скриптового языка jUEL.
  9. Запуск как отдельным приложением, так и внутри вашего приложения.


Как видно плюсов у технологии достаточно много, поробуем их разобрать более подробно в последующих статьях. А что же насчет минусов?
Основное опасение разработчиков при использовании таких технологий как JBPM, OSWorkflow и т.п. состоит в том, что они считаются медленными.
Моя дальнейшая работа с JBPM позволила мне усомниться в этом. Результаты тестов, будут приведены в следующих статьях.

Начнем.

Всем привет. В этом блоге я буду писать о различных технологиях, используемых в веб-разработке. Так же не буду избегать
текстов, связанных с общими вопросами программирования на языке Java, работы с БД, создания инфраструктуры разработки и прочих околоразработческих тем.