Перед тем, как выпустить 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))" |
Таким образом, можно найти именно то, что нужно, таким образом, что можно указывать не только пакеты и версии.
Как вы можете использовать это для ваших бизнес-процессов?
Заголовки возможностей для процессов
Одним из вариантов использования, который быстро пришел мне в голову, были определения процессов, которые зависят друг от друга, например, если у вас есть процесс с активностью вызова. Пример может выглядеть так (пожалуйста, извините, что я не подготовил исчерпывающий пример):

Давайте назовем это «процессом голода». И процесс вызываемого абонента, «Телефонный процесс» может быть таким простым:
В прошлый раз, когда я проверял, нет ничего, что помешало бы вам попытаться запустить процесс 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.
| Ссылка: | Что могут сделать возможности для ваших процессов? от нашего партнера по JCG Ронни Браунлиха в « Неправильные треки» в блоге для разработчиков . |
