Управление зависимостями процессов и сервисов в среде SOA
Предыстория Знаете ли вы, от каких сервисов зависит процесс BPEL? Если используются разные версии процесса BPEL, зависимости между ними могут быстро усложниться. Сложность управления зависимостями возрастает, если принять во внимание службы Enterprise Service Bus (ESB), вызываемые процессом BPEL. Сложность делает развертывание и тестирование трудоемкими, трудными и подверженными ошибкам.
Часто нам приходится использовать инструмент моделирования Microsoft Visio, чтобы вручную отображать зависимости и пытаться обновить зависимости после каждого изменения в процессе. Это серьезное препятствие для гибкости инфраструктур сервис-ориентированной архитектуры (SOA), которые предназначены для обеспечения гибких изменений в бизнес-процессах.
В этой технической заметке вы узнаете, как успешно улучшить процесс сборки и реализовать автоматическое создание графиков зависимостей процессов.
Наша задача — реализовать для клиента демонстрационный проект Oracle SOA Suite, который содержит множество процессов BPEL и ссылается на множество подпроцессов BPEL и сервисов ESB. В итоге мы использовали дюжину процессов BPEL и сервисов ESB (которые были определены как общедоступные сервисы и были включены в реестр сервисов), а также другие собственные процессы BPEL и сервисы ESB.
Во-первых, мы решили создать развертывание на базе Ant для всех сервисов проекта, развернуть процессы BPEL (включая тестовые примеры, которые их выполняют) в различных средах (тестирование, интеграция, производство), а также развернуть сервисы ESB для Эти среды основаны на Ant. Компьютерные электронные книги скачать бесплатно
Требования После завершения первой версии проекта у нас есть некоторые требования:
,
Когда меняется процесс BPEL или служба ESB, мы не хотим развертывать все службы проекта. Поэтому нам необходимо перейти от развертывания, ориентированного на проекты, к подходу, ориентированному на государственные услуги.
При развертывании процесса BPEL также автоматически развертываются все зависимые (собственные) подпроцессы и службы ESB.
Чтобы предотвратить перезапись определенной версии процесса, развертывайте эту версию процесса только в том случае, если она еще не развернута на сервере. Перезапись приведет к потере всей информации о потоке экземпляра.
Визуальный график всех зависимостей процессов и сервисов должен автоматически создаваться во время развертывания без необходимости хранить эту информацию отдельно. Визуализация должна выглядеть так.
Открытые вопросы В ответ на эти новые требования мы задали следующие вопросы и дали следующие ответы:
Вопрос: Где хранится информация о зависимостях процессов и служб? Хотите добавить дополнительную информацию для создания полного графа зависимостей?
Ответ: Все службы, вызываемые процессом BPEL, хранятся в файле bpel.xml, помеченном партнерской привязкой. Информация о вызываемом процессе BPEL и версии также закодирована в URL-адресе. Например: Бесплатная загрузка компьютерных электронных книг.
<property name="wsdlRuntimeLocation">
${domain_url}/CustomerAccount_BES/1.3/CustomerAccount_BES?wsdl
</свойство>
Текущую версию развертываемого процесса BPEL можно найти в файле build.properties. Для поддержания версии процесса BPEL нам нужно всего лишь изменить свойство rev в файле build.properties.
Чтобы различать общедоступные и частные процессы BPEL, партнерская ссылка клиента в файле bpel.xml предоставляет новый атрибут «тип» со значением «публичный» или «частный», как показано здесь:
<partnerLinkBinding name="client">
<property name="wsdlLocation">CustomerAccount_BES.wsdl</property>
<property name="type">публичный</property>
</partnerLinkBinding>
Вопрос: Существует ли инструмент или платформа, которая может динамически генерировать графы зависимостей?
Ответ: Да, Graphviz ( www.graphviz.org ), инструмент с открытым исходным кодом, может генерировать графики из входных файлов в текстовом формате.
Вопрос: Каковы варианты ссылки на другие процессы BPEL?
Ответ: Возможные варианты:
Ссылка на версию по умолчанию Ссылка на конкретную версию Ссылка на служебный ключ UDDI (с закодированной информацией о версии или без нее)
Вопрос: Как можно реализовать все эти новые требования к развертыванию?
Ответ: Эти новые требования к развертыванию лучше всего реализуются с помощью пользовательских задач Ant.
Получив удовлетворительные ответы на вопросы по началу работы, давайте начнем с создания пользовательской задачи Ant. Файл bpel.xml анализируется в задаче Ant. Для всех найденных тегов PartnerLinkBindings анализ соответствующего файла bpel.xml начнется рекурсивно. Помимо анализа, текущее значение свойства версии («ref») извлекается из файла build.properties каждого найденного проекта BPEL. Одной из проблем рекурсивного анализа является пропуск циклических зависимостей.
Наш новый атрибут «type» и рекурсивный анализ в файле bpel.xml реализуют все наши потребности в развертывании с учетом службы.
Более того, мы используем Graphviz для решения проблемы автоматического создания графов зависимостей. Для этого мы объединим все зависимости, полученные в результате рекурсивного анализа bpel.xml, в один XML-файл, как показано ниже. Компьютерные электронные книги скачать бесплатно
<?xml version="1.0"coding="UTF-8"?>
<BPELЧемодан>
<BPELProcess id="Resource_BAS_SetForAccount" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_SetForAccount.bpel ">
<партнерлинкбиндингс>
<partnerLinkBinding name="client">
<property name="wsdlLocation">Resource_BAS_SetForAccount.wsdl</property>
<property name="type">публичный</property>
<property name="version">1.2</property>
</partnerLinkBinding>
<partnerLinkBinding name="RemoveFromAccount">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<property name="version">1.5</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPELПроцесс>
<BPELProcess id="Resource_BAS_RemoveFromAccount" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BAS_RemoveFromAccount.bpel ">
<партнерлинкбиндингс>
<partnerLinkBinding name="client">
<property name="wsdlLocation">Resource_BAS_RemoveFromAccount.wsdl</property>
<property name="type">публичный</property>
<property name="version">1.5</property>
</partnerLinkBinding>
<partnerLinkBinding name="CheckAvailability">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<property name="version">1.1</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPELПроцесс>
<BPELProcess id="Resource_BES_CheckAvailability" src=" http://www.oracle.com/technology/tech/soa/soa-suite-best-practices/Resource_BES_CheckAvailability.bpel ">
<партнерлинкбиндингс>
<partnerLinkBinding name="client">
<property name="wsdlLocation">Resource_BES_CheckAvailability.wsdl</property>
<property name="type">публичный</property>
<property name="version">1.1</property>
</partnerLinkBinding>
...
</partnerLinkBindings>
</BPELПроцесс>
...
</BPELЧемодан>
Используйте XSLT для преобразования объединенных файлов XML в целевой формат (.dot), который можно использовать в качестве входных данных для генератора Graphviz для создания изображения PNG, как показано ниже:
структуры диграфа {
узел [shape=record,fontname="Arial",fontsize="10"];
край [fontname="Arial",fontsize="8"];
рангдир=LR;
меткаjust = л;
"Resource_BAS_SetForAccount_1_2" [shape=record,label="{Resource_BAS_SetForAccount}|{1.2|public}",
fillcolor=yellowgreen,style=filled];
"Resource_BAS_RemoveFromAccount_1_5" [shape=record,label="{Resource_BAS_RemoveFromAccount}|{1.5|public}",
fillcolor=yellowgreen,style=filled];
"Resource_BES_CheckAvailability_1_1" [shape=record,label="{Resource_BES_CheckAvailability}|{1.1|public}",
fillcolor=yellowgreen,style=filled];
"Resource_BAS_SetForAccount_1_2" -> "Resource_BAS_RemoveFromAccount_1_5" [decorate=true,label=""];
"Resource_BAS_RemoveFromAccount_1_5" -> "Resource_BES_CheckAvailability_1_1" [decorate=true,label=""];
}
Граф зависимостей, созданный указанным выше файлом DOT, выглядит следующим образом:
В поле отображаются имя, версия и тип службы. Цвет поля указывает тип услуги. На этой диаграмме у нас есть три государственные (зеленые) услуги. На диаграмме в начале этой статьи также показаны службы ESB (белые) и службы BPEL (оранжевые).
После создания идеальной диаграммы для каждого публичного процесса BPEL нам необходимо реализовать автоматическое развертывание соответствующих процессов. Для этого сервисно-ориентированного развертывания мы использовали список процессов, созданный ранее. Стандартная цель развертывания вызывается для каждого процесса в списке. Чтобы предотвратить перезапись существующих версий процесса на сервере, цель развертывания вызывается только в том случае, если на сервере нет текущей версии процесса.
Вы можете определить, доступна ли конкретная версия процесса, открыв HTTP-соединение с URL-адресом WSDL процесса, а затем проверив возвращенный код состояния (состояние HTTP 200 — развернуто, состояние HTTP 404 — еще не развернуто). Компьютерные электронные книги скачать бесплатно
Результат нашей пользовательской задачи Ant (содержащей рекурсивный анализ), создания PNG-изображения и сервисно-ориентированного развертывания выглядит следующим образом:
...
[mkdir] Созданный каталог: /MyProject/Resource_BAS_SetForAccount/doc
[bpeltask] ** НАЧИНАЕМ DeployWithDependencesTask **
[bpeltask] Resource_BAS_SetForAccount-1.2
[bpeltask] ** ПАРАМЕТР **
[bpeltask] имя_точечного файла: doc/bpel-recursiv-all.dot
[bpeltask] dotfilenamepublic: doc/bpel-recursiv-public.dot
[bpeltask] Deploytarget: развернуть
[bpeltask] развертывание: правда
[bpeltask] перезапись: ложь
[bpeltask] stoponalreadydeployed: ложь
[bpeltask] ** РЕКУРСИВНОЕ РАЗРЕШЕНИЕ ВСЕХ ФАЙЛОВ bpel.xml **
[bpeltask] [Resource_BAS_SetForAccount-1.2]
[bpeltask] [Resource_BAS_SetForAccount-1.2, Resource_BAS_RemoveFromAccount-1.5]
[bpeltask] [Resource_BAS_SetForAccount-1.2, Resource_BAS_RemoveFromAccount-1.5, Resource_BES_CheckAvailability-1.1]
[bpeltask] ** НАПИСАНИЕ ЦЕНТРАЛЬНОГО ФАЙЛА bpel.xml **
[bpeltask] ** ПРЕОБРАЗОВАНИЕ ТОЧЕЧНОГО ФАЙЛА **
[bpeltask] ** РАЗВЕРТЫВАНИЕ СЕРВИСА **
[bpeltask] ============================================= ========================
[bpeltask] СЛУЖБА УЖЕ РАЗВЕРНУТА (HTTP/1.1 200 OK) «Resource_BES_CheckAvailability» в версии «1.1» http://localhost:8888/orabpel/default/Resource_BES_CheckAvailability/1.1 / Resource_BES_CheckAvailability?wsdl
[bpeltask] ============================================= ========================
[bpeltask] ============================================= ========================
[bpeltask] СЛУЖБА УЖЕ РАЗВЕРНУТА (HTTP/1.1 200 ОК) «Resource_BAS_RemoveFromAccount» в версии «1.5» http://localhost:8888/orabpel/default/Resource_BAS_RemoveFromAccount/1.5 / Resource_BAS_RemoveFromAccount?wsdl
[bpeltask] ============================================= ========================
[bpeltask] ============================================= ========================
[bpeltask] СЕРВИС ЕЩЕ НЕ РАЗВЕРНУЛСЯ (HTTP/1.1 404 не найден) http://localhost:8888/orabpel/default/Resource_BAS_SetForAccount/1.2/ Resource_BAS_SetForAccount?wsdl
[bpeltask] НАЧИНАЕМ РАЗВЕРТЫВАНИЕ СЕРВИСА Resource_BAS_SetForAccount в версии 1.2
[bpeltask] ============================================= ========================
...
Заключение Сервисно-ориентированное развертывание, которое автоматически генерирует графы зависимостей, отвечает всем нашим потребностям в прозрачности инфраструктуры SOA. Поскольку развертывание полностью основано на Ant, мы также можем использовать его для наших ночных и производственных заданий Luntbuild (среда непрерывной сборки).
Чтобы поддержать управление SOA наших клиентов, мы опубликуем наш общедоступный процесс и его документацию, а также результирующий граф зависимостей в вики клиента, как показано здесь:
Страницы Wiki генерируются динамически, когда поиск в реестре служб позволяет получить версию зарегистрированной в данный момент общедоступной службы. Цифры на вики-странице содержат ссылки на репозиторий исходного кода (Subversion), который содержит изображения документации в натуральную величину и зарегистрированные версии наших общедоступных сервисов. Нажмите на миниатюру, чтобы получить соответствующий файл из Subversion через WebDAV.