Перед тем, как выпустить 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 Ронни Браунлиха в « Неправильные треки» в блоге для разработчиков . |