Thursday, April 5, 2007

Jboss jBPM

Вступление.

Разрабатывая одно из бизнес-приложений для нашей компании, я столкнулся с проблемой формализации бизнес правил которые должно реализовывать приложение. Хорошим подходом для реализации бизнес правил, возможно, может выступать паттерн "Стратегия" [Strategy]. Однако, как только правила меняются либо последовательность действий для достижения цели должна поменяться, а может и то и другое, нужно переписывать стратегию либо писать новую. Это не всегда удобно, особенно в часто меняющейся бизнес логике (а она часто меняется в активно растущих компаниях).

Что для меня стратегия? Стратегия это набор сервисов которые последовательно применяются к бизнес - объектам, либо объектам вашей предметной логики. Сервисы меняют состояния ваших объектов, и таким образом от сервиса к сервису вы получаете необходимый результат.

К чему я стремлюсь? Стремления мои были нацелены к тому чтобы настройка стратегий была гибкой, то есть для того, чтобы изменить стратегию мне необходимо было бы просто поменять "связи" между сервисами или "нарастить" стратегию очередными сервисами, самое крайнее - это дописать новый сервис и включить в стратегию. Одним из требований, которым я руководствовался - это манипулируя набором сервисов собирать новые стратегии с минимальным, а лучше нулевым изменением кода.


jBoss jBPM

Не секрет что java технологии бурно развиваются, и область граф - ориентированного программирования тоже не стоит на месте. Технология с которой я познакомился называется BPM (Business Process Modeling). И её реализацией jBoss jBPM.

jBoss jBPM позволяет:

  1. Моделировать бизнес процессы до момента их реализации.
  2. Поддерживает язык PDL (Process Definition Language) - XML-based описание бизнес процессов
  3. Система логирования ваших бизнес процессов
  4. Сохранение состояний ваших бизнес объектов и определений процессов в БД и чтение из неё.
  5. Поддержка транзакций в бизнес процессах.
  6. Обработка исключений.


    Основными элементами BPM являются узлы (Nodes) и переходы (transitions). Каждый узел связан с каким то событием в вашем бизнес процессе. Переходы - это связи между узлами процесса.


    Хорошим подходом в моделировании бизнес процессов, я считаю, является моделирование графа. Граф можно и нужно моделировать до реализации, зачастую с заказчиком системы, чтобы ясно представлять что за каждым узлом должно скрываться.

    Каким же образом к графу "цеплять" java-код реализующий логику бизнес-процессов? Для этого есть действия (Action). Действия можно разделить на 2 типа - действия привязанные к узлам (node) и действия привязанные к событиям (events), например события "вход в узел" или "выход из него" во отличии действий по событию действия привязанные к узлам могут влиять на процесс перехода к другим узлам.

    Каждому действию (Action) соответствует обработчик (ActionHandler) в котором реализована логика.

    Вот список типов узлов (Node).

  7. task-node - содержит перечень задач которые необходимо выполнить при входе в данный узел
  8. State - узел ожидающий определенного состояния. Никаких задач в нем не выполняется
  9. Decision - узел принятия решения - по какому переходу дальше двигаться
  10. Fork - разветвляет граф на конкурентные потоки выполнения.
  11. Join - собирает разветвленные потоки. Каждому Fork должен соответствовать свой join узел.
  12. Node - самый часто используемый тип узла - используется для внедрения вашего года в граф выполнения.


    jBoss jBPM содержит еще много "вкусных вещей" - актеры и их роли, Swimlane, планировщики задач, асинхронное выполнение, бизнес календарь.


    http://www.jboss.com/products/jbpm

2 comments:

N.V.Luchina said...

оч интересно)

Anonymous said...

может это как-то попроще можно написать, а то каждое слово по отдельности понятно, но смысл ускользает.