jBPM5 — Обзор
JBPM означает «Управление бизнес-процессами Java». Это продукт JBoss, который является фреймворком с открытым исходным кодом. Прежде чем двигаться дальше, давайте сначала определим бизнес-процесс.
Что такое бизнес-процесс?
По определению, бизнес-процесс представляет собой последовательность задач, выполняемых в повторяемом порядке, выполняемых людьми и / или системами для достижения бизнес-цели. Он описывает порядок (с использованием блок-схемы), в котором необходимо выполнить серию шагов. Бизнес-процесс может значительно улучшить видимость и гибкость бизнес-логики.
Давайте возьмем пример. На следующем снимке экрана показан рабочий процесс / блок-схема, к которой может относиться большинство ИТ-специалистов. Это обычный процесс, который используется в большинстве организаций для оценки сотрудников на основе их работы.
Процесс происходит в следующем порядке —
-
Сотрудники самостоятельно оценивают себя и представляют отчет руководителям своих проектов.
-
Ваша производительность затем оценивается менеджером проекта и менеджером по персоналу. На основании оценки они дают сотрудникам оценку.
-
Окончательный рейтинг или обратная связь по результатам работы затем передаются обратно сотрудникам.
Сотрудники самостоятельно оценивают себя и представляют отчет руководителям своих проектов.
Ваша производительность затем оценивается менеджером проекта и менеджером по персоналу. На основании оценки они дают сотрудникам оценку.
Окончательный рейтинг или обратная связь по результатам работы затем передаются обратно сотрудникам.
Этот процесс применим практически ко всем сотрудникам и, следовательно, это очень хороший пример для понимания бизнес-процесса. Это последовательность задач, и это происходит в определенном порядке.
Что такое jBPM?
Бизнес-процесс является ключевым понятием для понимания любой организационной структуры. Такая технология, как jBPM, помогает эффективно управлять сложными бизнес-процессами. JBPM — это инструмент, который может эффективно организовать бизнес-процесс. Как правило, каждое приложение уровня предприятия будет иметь последовательность задач, которые выполняются в определенном порядке, и эти процессы могут быть организованы с помощью jBPM.
Прелесть jBPM в том, что он похож на блок-схему. Это может быть легко понято и бизнес-аналитиками. jBPM может быть встроен в приложение Java и запущен как сервис.
Особенности JBPM
jBPM — это легкий, полностью встраиваемый механизм процессов с открытым исходным кодом, написанный на Java. Его наиболее заметные особенности перечислены ниже —
-
jBPM выполняет бизнес-процессы, которые разработаны с использованием спецификаций BPMN 2.0.
-
jBPM может быть полностью интегрирован с Eclipse и аналогичными IDE, чтобы обеспечить поддержку перетаскивания для создания рабочего процесса.
-
В jBPM доступны инструменты пользовательского интерфейса для привлечения бизнес-аналитиков и пользователей прямо на этапе проектирования.
-
jBPM поддерживает постоянство и управление транзакциями с помощью JPA и JTA.
-
Можно создать настраиваемые обработчики рабочих элементов, чтобы создать пользовательскую задачу, которую позже можно будет использовать в качестве компонента для других рабочих процессов.
jBPM выполняет бизнес-процессы, которые разработаны с использованием спецификаций BPMN 2.0.
jBPM может быть полностью интегрирован с Eclipse и аналогичными IDE, чтобы обеспечить поддержку перетаскивания для создания рабочего процесса.
В jBPM доступны инструменты пользовательского интерфейса для привлечения бизнес-аналитиков и пользователей прямо на этапе проектирования.
jBPM поддерживает постоянство и управление транзакциями с помощью JPA и JTA.
Можно создать настраиваемые обработчики рабочих элементов, чтобы создать пользовательскую задачу, которую позже можно будет использовать в качестве компонента для других рабочих процессов.
jBPM5 — Eclipse Plugin
Ниже приведены предварительные условия для установки плагина jBPM:
- Java 1.5 (или выше) SE JDK
- Eclipse 4.2 или любая версия и плагин jBPM
Поскольку jBPM написан на Java, мы расскажем, как добавить нужные плагины в этом разделе. Учитывая максимальное количество пользователей Java, использующих Eclipse, давайте посмотрим, как добавить плагин jBPM в Eclipse.
Загрузите двоичные файлы по следующей ссылке — http://download.jboss.org/drools/release/5.3.0.Final/
Не смущайтесь, увидев Drools здесь. Те же плагины используются для jBPM. Если у вас уже установлен плагин Drools, вы можете пропустить шаги установки.
Распакуйте его на жесткий диск. Затем запустите Eclipse и выберите «Справка» → «Установить новое программное обеспечение».
Нажмите Добавить репозиторий —
Нажмите кнопку « Локально» и выберите «… / binaries / org.drools.updatesite» (где вы загрузили на свой компьютер)
Выберите Drools и jBPM, а затем нажмите кнопку Далее .
Снова нажмите « Далее» и выберите «Я принимаю условия лицензионного соглашения», а затем нажмите « Готово» . Начнется установка программного обеспечения —
После успешной установки вы получите следующее диалоговое окно —
Нажмите Да . Затмение возобновляется. Теперь перейдите в Windows → Настройки → Drools → Узлы потока Drools
Если вы видите узлы, как показано на скриншоте выше, это доказывает, что плагины были успешно установлены. Теперь мы готовы написать нашу первую программу jBPM.
jBPM5 — Привет, мир!
Здесь, в этой главе, мы напишем нашу первую программу «Hello World», используя jBPM. Следуйте инструкциям ниже
Перейдите в Файл → Создать → Проект Drools —
Нажмите Далее . Дайте подходящее имя для первого проекта: «HelloWorld» в нашем случае.
Нажмите Далее . Установите два нижних флажка, а именно:
- Добавьте образец файла процесса HelloWorld в этот проект
- Добавьте образец класса для загрузки и выполнения процесса HelloWorld.
Нажмите Далее . Нажмите «Настроить параметры рабочего пространства» (выделено красным на следующем снимке экрана) —
Нажмите кнопку Добавить —
После того, как вы нажмете кнопку « Добавить» , появится следующий экран. Нажмите «Создать новую среду выполнения Drools5»
Укажите путь до папки binaries, куда вы скачали файл droolsjbpm-tools-distribution-5.3.0.Final.zip
Затем выберите «Установленные среды выполнения Drools» и нажмите « ОК» .
Появится следующий экран. Нажмите кнопку Готово .
Теперь откройте представление Package Explorer в Eclipse. Вы увидите следующий экран —
Класс ProcessTest.java — это класс для загрузки файла ruleflow (rf), а ruleflow.rf — основной поток правил, созданный для проекта HelloWorld.
Дважды щелкните файл ruleflow.rf, и вы увидите следующий поток правил —
ЗЕЛЕНЫЙ кружок обозначает начало рабочего процесса, тогда как КРАСНЫЙ кружок — это конец рабочего процесса.
На панели, изображенной слева, перечислены различные компоненты, которые используются в рабочем процессе. Помимо START и END, в рабочем процессе можно использовать множество компонентов, о которых мы расскажем в следующем разделе.
Hello между событиями START и END является задачей сценария, а именем задачи сценария является Hello . Чтобы увидеть, какой код написан в скрипте задачи «Привет», перейдите в Windows → Показать представление → Прочее → Свойства.
Примечание. Во время работы над jBPM всегда оставляйте представление «Свойства» открытым, поскольку все конфигурации отображаются только в представлении свойств.
Нажмите кнопку ОК . Теперь выберите Hello, и вы можете увидеть свойства события «Hello» —
Чтобы увидеть весь код, написанный внутри события «Hello», выберите свойство Action .
Круг, отмеченный красным, является правкой свойства действия. Как только вы нажмете на Edit —
Вы можете отредактировать это и написать код, который вы хотите выполнить внутри задачи скрипта «Hello». Давайте отредактируем это —
Нажмите ОК . Теперь откройте класс ProcessTest.java и запустите его как приложение Java. Ниже приведен его вывод —
Термины, используемые в классе ProcessTest.java, такие же, как и в Drools. В классе ProcessTest.java следует отметить следующее:
ksession.startProcess("com.sample.ruleflow");
Когда вы пишете код для запуска процесса, строка, переданная методу startProcess, является свойством id, когда мы открываем рабочий процесс.
jBPM5 — Компоненты
Ядро BPMS — это сердце BPM. На следующем рисунке изображено ядро BPMS и его компоненты.
Семантический модуль
Семантический модуль определяет семантику языка (что означает каждое слово) и как он будет переведен для внутренних структур механизма процесса, которые готовы к исполнению. Этот модуль в основном содержит основы для понимания языка BPMN2.
Процессный двигатель
Процессор — это тот, кто отвечает за фактическое выполнение наших бизнес-процессов. Механизм процесса отвечает за создание новых экземпляров процесса и сохранение состояния для каждого из них. Внутри кода механизма процесса внутренние структуры определены для представления каждого действия, которое находится в наших определениях процесса. Все механизмы, которые используются для создания экземпляров этих определений процессов, будут выполнять их, как определено в механизме процесса.
Постоянство и Транзакции
В большинстве корпоративных приложений все взаимодействия должны выполняться внутри границы транзакции, и мы должны иметь дело с различными системами, API и проектами. Кроме того, мы должны иметь гибкий механизм для определения —
-
Как обрабатывать длительные процессы
-
Как и когда мы можем хранить информацию о состоянии процесса и информацию, которую обрабатывает процесс
-
Как и когда нам нужно создавать, фиксировать или откатывать транзакции ядра процесса
-
Какие бизнес-исключения могут откатиться или компенсировать уже выполненные бизнес-действия
Как обрабатывать длительные процессы
Как и когда мы можем хранить информацию о состоянии процесса и информацию, которую обрабатывает процесс
Как и когда нам нужно создавать, фиксировать или откатывать транзакции ядра процесса
Какие бизнес-исключения могут откатиться или компенсировать уже выполненные бизнес-действия
Все вышеперечисленные пункты покрыты компонентом персистентности и транзакций внутри jBPM.
Аудит / История Журналы
Этот модуль отвечает за предоставление пользователю способа узнать о том, как выполняются наши процессы. Эта информация включает в себя историческую информацию о процессах, которые уже завершились, и самую последнюю информацию о процессах, которые выполняются.
Инструменты мониторинга деловой активности (BAM) и информационные панели являются одними из наиболее распространенных клиентов для информации, генерируемой этим модулем. Модуль Audit / History Logs обычно используется для извлечения полезной информации и метрик, которые будут взаимодействовать с различными инструментами, предназначенными для отображения этой информации соответствующим образом.
jBPM5 — Компоненты рабочего процесса
На следующем снимке экрана показаны различные компоненты рабочего процесса, доступные в jBPM 5. Используя эти компоненты, вы можете создать рабочий процесс для управления процессом.
Вы также можете создавать свои собственные задачи, но об этом будет рассказано позже. Кроме того, доступны сервисные задачи, которые можно использовать для организации процесса.
-
Start Event — это первый узел, выполняемый в каждом процессе. В вашем процессе может быть только один начальный узел.
-
Конечное событие — этот узел сигнализирует об окончании процесса. В процессе может быть более одного экземпляра этого типа узла.
-
Задача правила — это узел, который оценивает группу RuleFlow, то есть группу правил Drools в одноименной области.
-
Gateway (дивергенция) aka Split — этот конкретный узел создает новые пути / пути в процессе. У него два или более исходящих соединения. Вы можете выбрать один из трех типов Сплитов / Ворот.
-
И ВОРОТА — где поток процесса продолжается для всех исходящих соединений одновременно.
-
XOR GATE — который идет по одному только исходящему пути в соответствии с некоторыми предопределенными ограничениями, определенными в рабочем процессе.
-
ИЛИ ВОРОТА — где поток продолжается на основе оценки всех исходящих ограничений, и этот путь активируется, когда ограничение оценивается как истинное.
-
-
Шлюз (сходится), также известный как Соединение — это объединение является противоположностью разделения. Он объединяет несколько путей в один. Может быть четыре различных типа соединений / ворот —
-
И — Поток продолжается, когда все ветви завершены.
-
XOR — поток продолжается, когда хотя бы одна ветвь завершена.
-
Дискриминатор — Как и XOR, он продолжается, если одна из его ветвей была завершена. Но в отличие от XOR, он регистрирует завершения других ветвей, пока все соединения не будут завершены. Когда это происходит, узел сбрасывается, и его можно ввести снова, когда активируется входящая ветвь, и цикл начинается заново.
-
N-of-M — поток продолжается, когда n число m ветвей завершается. Вам нужно указать n (число) при настройке шлюза, сколько веток должно завершиться до выхода из потока.
-
-
Повторно используемый подпроцесс — вызывает другой процесс. Это очень полезно для объединения нескольких меньших процессов в более крупные. Этот больший может быть координационным процессом. Вы можете настроить вызывающий процесс так, чтобы он ожидал завершения вызываемого абонента, а также имел независимый жизненный цикл своего родителя.
-
Задача сценария — узел, который может выполнять простой фрагмент кода.
-
Событие таймера — этот тип узла запускает таймер и запускается по истечении таймера. Включает связанные со временем процессы и повторяющиеся задачи.
-
Событие ошибки — этот тип узла сигнализирует об ошибке в процессе. У него нет исходящих соединений. Указывает FaultName и FaultVariable. Движок будет искать обработчик исключений, который соответствует FaultName и сохраняет информацию о сбое в переменной, определенной в FaultVariable.
-
-
Событие сообщения — оно срабатывает, когда генерируется событие заранее определенного типа. Это может быть как внутреннее событие (сигнализируемое внутри процесса), так и внешнее (сигнализируемое внешним объектом, отличным от механизма процесса).
-
Пользовательская задача — узел, который создает человеческую задачу. Эта человеческая задача — это действие, которое должен выполнить актер-человек.
-
Встроенный подпроцесс — Помогает создать подпроцесс внутри родительского процесса. У него может быть своя сфера применения. Это полезно для более крупного процесса, где вы хотите сохранить некоторые сложные ветви изолированными. Может иметь свои собственные переменные и обработчики исключений
-
Несколько экземпляров, иначе говоря, для каждого — это позволяет собирать элементы в подпроцесс. Очень полезно в сочетании с повторно используемым подпроцессом для создания и координации небольших процессов.
Start Event — это первый узел, выполняемый в каждом процессе. В вашем процессе может быть только один начальный узел.
Конечное событие — этот узел сигнализирует об окончании процесса. В процессе может быть более одного экземпляра этого типа узла.
Задача правила — это узел, который оценивает группу RuleFlow, то есть группу правил Drools в одноименной области.
Gateway (дивергенция) aka Split — этот конкретный узел создает новые пути / пути в процессе. У него два или более исходящих соединения. Вы можете выбрать один из трех типов Сплитов / Ворот.
И ВОРОТА — где поток процесса продолжается для всех исходящих соединений одновременно.
XOR GATE — который идет по одному только исходящему пути в соответствии с некоторыми предопределенными ограничениями, определенными в рабочем процессе.
ИЛИ ВОРОТА — где поток продолжается на основе оценки всех исходящих ограничений, и этот путь активируется, когда ограничение оценивается как истинное.
Шлюз (сходится), также известный как Соединение — это объединение является противоположностью разделения. Он объединяет несколько путей в один. Может быть четыре различных типа соединений / ворот —
И — Поток продолжается, когда все ветви завершены.
XOR — поток продолжается, когда хотя бы одна ветвь завершена.
Дискриминатор — Как и XOR, он продолжается, если одна из его ветвей была завершена. Но в отличие от XOR, он регистрирует завершения других ветвей, пока все соединения не будут завершены. Когда это происходит, узел сбрасывается, и его можно ввести снова, когда активируется входящая ветвь, и цикл начинается заново.
N-of-M — поток продолжается, когда n число m ветвей завершается. Вам нужно указать n (число) при настройке шлюза, сколько веток должно завершиться до выхода из потока.
Повторно используемый подпроцесс — вызывает другой процесс. Это очень полезно для объединения нескольких меньших процессов в более крупные. Этот больший может быть координационным процессом. Вы можете настроить вызывающий процесс так, чтобы он ожидал завершения вызываемого абонента, а также имел независимый жизненный цикл своего родителя.
Задача сценария — узел, который может выполнять простой фрагмент кода.
Событие таймера — этот тип узла запускает таймер и запускается по истечении таймера. Включает связанные со временем процессы и повторяющиеся задачи.
Событие ошибки — этот тип узла сигнализирует об ошибке в процессе. У него нет исходящих соединений. Указывает FaultName и FaultVariable. Движок будет искать обработчик исключений, который соответствует FaultName и сохраняет информацию о сбое в переменной, определенной в FaultVariable.
Событие сообщения — оно срабатывает, когда генерируется событие заранее определенного типа. Это может быть как внутреннее событие (сигнализируемое внутри процесса), так и внешнее (сигнализируемое внешним объектом, отличным от механизма процесса).
Пользовательская задача — узел, который создает человеческую задачу. Эта человеческая задача — это действие, которое должен выполнить актер-человек.
Встроенный подпроцесс — Помогает создать подпроцесс внутри родительского процесса. У него может быть своя сфера применения. Это полезно для более крупного процесса, где вы хотите сохранить некоторые сложные ветви изолированными. Может иметь свои собственные переменные и обработчики исключений
Несколько экземпляров, иначе говоря, для каждого — это позволяет собирать элементы в подпроцесс. Очень полезно в сочетании с повторно используемым подпроцессом для создания и координации небольших процессов.
jBPM5 — нарисовать и проверить рабочий процесс
Чтобы нарисовать рабочий процесс, вы можете использовать любой из компонентов, доступных в палитре, как описано в статье выше. Весь рабочий процесс будет иметь один старт, но он может иметь несколько концов.
С помощью скриншотов я покажу вам, как создать рабочий процесс.
Здесь я открыл пустой файл rf или bpmn
Чтобы добавить любое событие, выберите конкретное событие из палитры компонентов и перетащите его вправо. Например, я выбрал стартовое событие и перетащил его на правую сторону, а также на расходящийся шлюз.
Теперь нужно соединить два компонента. Выберите поток последовательности и соедините два компонента.
Таким образом, вы можете перетащить компоненты в редактор и использовать поток последовательности для объединения различных компонентов. Нужно просто позаботиться о том, чтобы у некоторых компонентов было только одно входящее и одно исходящее соединение, и необходимо соответствующим образом настроить поток последовательности для создания значимого потока.
Нужно также установить некоторые свойства, пока мы рисуем рабочий процесс. Опубликуем все свойства, чтобы установить здесь. Я только что создал поток, но он не будет иметь особого смысла, чтобы посмотреть на него в первый момент, так как я не установил никаких свойств в созданном рабочем процессе.
Как вы можете видеть выше, это пустой рабочий процесс без какого-либо описания как такового, и из созданного рабочего процесса ничего не разобрать.
Тем не менее, чтобы объяснить далее, у меня есть начальный компонент, а затем расходящийся шлюз и, в зависимости от состояния расходящегося шлюза, я выберу один путь и выполню некоторый код в задаче сценария, а затем завершу рабочий процесс. Поэтому мне нужно установить свойства для шлюза расходящихся, затем задачи скрипта и шлюза конвергенции.
На этом этапе я также покажу вам, что в моем рабочем процессе есть некоторые ошибки, и позже я покажу вам, как только я установлю свойства, в моем рабочем процессе не будет ошибок, следовательно, я покажу вам, как ПРОВЕРИТЬ созданный рабочий процесс.
Совет. Помните, что валидаторы включены в Windows → Настройки → Проверка.
Ниже скриншот показывает настройки в затмении.
По скриншоту видно, что есть 4 ошибки. Первая ошибка говорит, что скрипт не имеет действия, а затем еще одна ошибка — определенный шлюз не имеет определенного типа. Следовательно, нам нужно удалить эти ошибки, чтобы иметь возможность запустить рабочий процесс.
Теперь мы установим свойства по одному и увидим, что ошибки исчезают.
Выберите первый шлюз (расходиться) и нажмите на свойства, затем нажмите на тип и выберите ворота в соответствии с вашими требованиями.
После того, как вы выбрали шлюз, вам нужно выбрать ограничение.
Нажмите на кружок, помеченный красным, вы увидите скриншот ниже
Нажмите на редактировать и заполните детали как на скриншоте —
Нажмите «Импорт» и импортируйте класс, для которого мы будем выполнять любую операцию. На скриншоте мы импортировали пассажирский POJO, который мы будем использовать в нашем примере.
Точно так же заполните детали для другого ограничения —
Теперь нажмите кнопку ОК .
Снова нажмите ОК . Теперь выберите задачу сценария и выполните тот же процесс, что и для расходящегося шлюза.
Мы только что добавили SOP (оператор печати), чтобы показать поток. Любой код Java или Mvel может быть написан в сценарии задачи.
Аналогичным образом добавьте код для второго ограничения —
Наконец, вам нужно добавить тип шлюза для шлюза расходящихся.
Теперь сохраните файл рабочего процесса и перейдите к просмотру проблем. Все проблемы будут решены.
Отсутствие ошибок в представлении проблем предполагает, что в созданном рабочем процессе нет ошибок. Так создается и проверяется рабочий процесс в jBPM.
jBPM5 — Пример
В этой главе мы возьмем пример, чтобы объяснить, как применять jBPM на практике. Задача состоит в том, чтобы использовать jBPM, чтобы решить, сядет ли пассажир на рейс или поезд, в зависимости от его дохода.
Этапы создания проекта остаются такими же, как и в проекте «Hello World». Откройте файл .rf в редакторе и увидите изменения, отмеченные красным —
Здесь мы изменили идентификатор потока правил (уникальный) и добавили переменный доход, так как мы будем выбирать маршрут на основе дохода пассажира.
Как установить переменную — Выберите кнопку редактирования, отмеченную красным.
Нажмите кнопку Добавить —
Появится следующий экран —
Введите имя как доход и введите как целое число.
Нажмите ОК . Вы увидите переменную дохода, определенную сейчас.
Изменения, которые нужно сделать в классе ProcessTest.java (класс для загрузки и запуска вашего процесса) —
Map<String, Object> params = new HashMap<String, Object>(); params.put("income", 1200); // start a new process instance ksession.startProcess("vivek.ruleflow", params);
Вам необходимо создать MAP и установить значение в MAP и передать это значение перегруженному методу startProcess. Как показано, мы изменили идентификатор потока правил и, следовательно, использовали тот же идентификатор (vivek.ruleflow) в методе startProcess.
Перед запуском класса ProcessTest.java создайте POJO Passenger.java в том же пакете, что и ProcessTest.java.
public class Passenger { private String name; private int income; Getters and setters here }
Теперь запустите класс ProcessTest.java как Java-приложение и посмотрите результат:
Изменить значение — params.put («доход», 900); и повторно запустите класс и увидите изменение в выводе.