Статьи

Что могут сделать возможности для ваших процессов?

Перед тем, как выпустить Camunda BPM OSGi 2.0, я хочу сделать еще немного рекламы и показать, что возможно с новой версией. Одно изменение в новой версии будет то, что это зависит от OSGi 4.3 и больше не 4.2. Одно из изменений, помимо того факта, что теперь я могу использовать дженерики в коде (да!), Заключается в том, что в OSGi 4.3 будут работать заголовки возможностей. Итак, что в них такого впечатляющего?

Заголовки возможностей

Заголовками возможностей являются два заголовка Provide-Capability и Require-Capability . Они являются еще одной абстракцией заголовков Import-Package и Export-Package мы все (должны;)) знаем. Но с заголовками возможностей вы не так ограничены, как с заголовками пакетов. Произвольные вещи могут быть определены, например,

1
Provide-Capability: sensor; type=gyro

будет действительным утверждением. Но вы не ограничены одним атрибутом:

1
Provide-Capability: sensor; type=heat; minTemp=0; maxTemp=100

тоже возможно. И пакет, который требует таких возможностей, может использовать выражение фильтра LDAP:

1
Require-Capability: sensor; filter:="(&(type=type=heat)(minTemp=0)(maxTemp=100))"

Таким образом, можно найти именно то, что нужно, таким образом, что можно указывать не только пакеты и версии.

Как вы можете использовать это для ваших бизнес-процессов?

Заголовки возможностей для процессов

Одним из вариантов использования, который быстро пришел мне в голову, были определения процессов, которые зависят друг от друга, например, если у вас есть процесс с активностью вызова. Пример может выглядеть так (пожалуйста, извините, что я не подготовил исчерпывающий пример):

диаграмма
Давайте назовем это «процессом голода». И процесс вызываемого абонента, «Телефонный процесс» может быть таким простым:

диаграмма (1)

В прошлый раз, когда я проверял, нет ничего, что помешало бы вам попытаться запустить процесс Hunger, хотя процесс Phone еще не развернут. Если вы захотите запустить процесс «Голод» автоматически, вы столкнетесь с неприятным исключением. Здесь заголовки могут помочь. Вы можете просто указать в своем МАНИФЕСТЕ, что вам требуется процесс Телефон, прежде чем ваш пакет может быть запущен:

1
Require-Capability: process; filter:="(key=Phone_process)"

Вы также можете добавить номер версии или что-то полезное. Пакет, содержащий процесс Phone, должен, конечно, содержать соответствующую часть:

1
Provide-Capability: process; key=Phone_process

Таким образом, при развертывании пакета с процессом Hunger его нельзя запустить без пакета, содержащего процесс Phone. Это позволяет управлять взаимозависимостями процессов, не сталкиваясь с исключениями.

Наконец, если вы используете плагин maven-bundle-plugin, я хочу привести вам короткий пример.

Установка заголовков с помощью maven-bundle-plugin

С помощью maven-bundle-plugin действительно легко установить заголовки. Я предполагаю, что вы используете
<packaging>bundle</packaging> в вашем ПОМ. Вот как вы можете установить заголовки:

1
2
3
4
5
6
7
8
9
<plugin>
   <groupId>org.apache.felix</groupId>
   <artifactId>maven-bundle-plugin</artifactId>
   <extensions>true</extensions>
   <configuration>
     <instructions>
       <Provide-Capability>process; key=Phone_process</Provide-Capability>
     </instructions>
   </configuration>

Видишь, кусок пирога;)

Я надеюсь, что смогу дать вам некоторое представление о том, как вы можете использовать заголовки возможностей, представленные в OSGi 4.3. Это был только быстрый пример, но я думаю, что он хорошо показывает, как OSGi может поддерживать ваши процессы BPMN.