Пример использования BPEL
Аналогом бизнес-процесса в терминологии BizTalk является оркестровка. Рассмотрим пример описания бизнес-процесса при помощи оркестровки BizTalk. В задачи этого бизнес-процесса входит получение определенного сообщения и дальнейшая его пересылка в десяти экземплярах. Полученная диаграмма процесса будет выглядеть в редакторе Visual Studio следующим образом:
Рис. 6.1. Диаграмма бизнес-процесса.
Как можно заметить, на ней определено два порта: Receive Port с операцией получения сообщения и Send Port с операцией его отправки. Сообщение получает элемент Receive, свойство Activate которого выставлено в true. Затем запускается цикл Loop с условием: «Variable > 0». Значение переменное Variable задается при ее инициализации при помощи свойства InitialValue, которое выставляется равное 10. Значение переменной изменяется при помощи скрипта Expression, где в качестве выражения введено: «Variable = Variable - 1;».
Переменные и сообщения задаются и редактируются в окне Orchestration View, которое выглядит следующим образом:
Рис. 6.2. Структура оркестровки.
Для задания порта в проект был добавлен файл XML-схемы, в котором был определен формат используемых сообщений. В качестве шаблона взаимодействия (Communication Pattern) был использован шаблон One-Way, позволяющий задать только одну операцию: получение или отправка. Привязки у портов в рассматриваемом примере не задавались. Таким образом, их необходимо будет задать при установке полученного приложения на сервер, указав при этом используемый адаптер и адрес в формате выбранного адаптера.
Откомпилированное приложение может быть загружено на сервер BizTalk, настроено и после этого запущено. Откомпилированное приложение для сервера BizTalk представляет собой библиотеку на .NET 2.0. Однако редактор в Visual Studio позволяет получить его и в формате BPEL. Для этого необходимо выставить свойства Module Exportable и Orchestration Exportable в true, не забыв указать при этом требуемое пространство имен. После этого становится возможным произвести экспорт оркестровки в BPEL через пункт контекстного меню Export To BPEL, которое появляется при клике по правой кнопке мыши на соответствующей оркестровке. Для рассмотренного выше примера BPEL описание выглядит так:
<?xml version="1.0"?>
<bpel:process xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:q1="BPEL"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
name="BPEL.Orchestration"
targetNamespace="BPEL"
xmlns:bpel="http://schemas.xmlsoap.org/ws/2003/03/business-process/">
<bpel:partnerLinks>
<bpel:partnerLink name="ReceivePort"
partnerLinkType="q1:ReceivePortType"
myRole="portRole" />
<bpel:partnerLink name="SendPort"
partnerLinkType="q1:SendPortType_0"
partnerRole="portRole" />
</bpel:partnerLinks>
<bpel:variables>
<bpel:variable name="Message"
messageType="q1:__messagetype_BPEL_Input" />
<bpel:variable name="Variable"
element="q1:int" />
</bpel:variables>
<bpel:sequence>
<bpel:receive partnerLink="ReceivePort"
portType="q1:RecivePortType"
operation="ReceiveOperation"
variable="Message"
createInstance="yes" />
<bpel:assign>
<bpel:copy>
<bpel:from>
<int xmlns="BPEL">10</int>
</bpel:from>
<bpel:to variable="Variable" />
</bpel:copy>
</bpel:assign>
<bpel:while condition=" bpel:getVariableData( 'Variable') > 0">
<bpel:sequence>
<bpel:invoke partnerLink="SendPort"
portType="q1:SendPortType"
operation="SendOperation"
inputVariable="Message" />
<bpel:assign>
<bpel:copy>
<bpel:from expression=" bpel:getVariableData('Variable') - 1" />
<bpel:to variable="Variable"
query="/*[local-name()='int' and namespace-uri()='BPEL']" />
</bpel:copy>
</bpel:assign>
</bpel:sequence>
</bpel:while>
</bpel:sequence>
</bpel:process>
Дата добавления: 2015-02-28; просмотров: 1487;