Язык BPEL предназначен для интеграции систем автоматизации в рамках общих бизнес процессов. Он используется при создании новых масштабных систем автоматизации, охватывающих несколько предприятий или подразделений холдинга. При этом необязательно, чтобы все участники использовали общую платформу интеграции, поскольку BPEL ориентирован на взаимодействие разнородных платформ и приложений.
Бизнес-процесс, выраженный средствами языка BPEL, называют BPEL-процессом.
Перед описанием процесса на BPEL полезно предварительно отобразить его в виде диаграмм активности UML. Пример такой диаграммы для процесса покупки книги взят из [1] и представлен на рис. 1. Этот процесс является асинхронным и включает в себя обращения к трем Web-сервисам. Сначала используется Web-сервис оценки полезности книги. Этот Web-сервис вызывается синхронно и возвращает значение рейтинга книги. Затем процесс запрашивает цену книги в двух книжных магазинах. Для этого асинхронно вызываются два идентичных Web-сервиса этих книжных магазинов. Затем процесс выбирает более дешевую книгу и асинхронно производит закупку.
Примечание 1
Под синхронизмом связи подразумевается приостановка процесса до получения ответа (как в RPC).
Для асинхронных связей клиенту требуются два потока для вызова службы: один - для передачи запроса, второй – для приема ответа (и соответственно в BPEL-процессе два типа портов: один для клиентских запросов, другой – для исполнения BPEL-процессом возврата к клиенту). Брокер, предоставляющий возможность потребителю вызывать Web-службу асинхронно, реализуется при помощи системы обмена сообщениями, которая использует очереди сообщений для передачи запроса и получения ответа.
Рис. 1.   UML-диаграмма для BPEL-процесса
BPEL-процесс задает порядок исполнения задействованных Web-сервисов (возможны последовательное или параллельное выполнение). Собственно BPEL-процесс инициируется получением запроса на выполнение некоторых действий.
В языке BPEL предусмотрены условные переходы, циклы, объявления и изменения переменных и другие операции. Простыми шагами (операциями) BPEL-процесса могут быть:
<invoke> - вызов нужного Web-сервиса (связь с другими Web-сервисами устанавливается, благодаря наличию описания Web-сервисов на языке WSDL);
<receive> - посылка сообщения;
<reply> - генерация ответа;
<assign> - управление значениями переменных;
<throw> - индикация ошибок и исключений;
<wait> - задержка;
<terminate> - завершение процесса.
Операции управления определяют структуру бизнес-процессов:
<sequence> - определяет набор последовательно выполняемых действий;
<flow> - поток, определяет набор параллельно выполняемых действий;
<switch> - переключатель на ту или иную ветвь процесса;
<while> - оператор цикла;
<pick> - выбор одной из альтернатив;
<variable> - декларация переменной;
<partnerLink> - определение партнерских связей.
Разработка BPEL-процесса начинается с ознакомления с Web-сервисами, участвующими в описываемом бизнес-процессе. Эти сервисы называются partner Web services (партнерские Web-сервисы).
Затем создается WSDL-описание BPEL-процесса. При этом указываются требуемые пространства имен (namespaces). Типы партнерских связей определены в WSDL-описании в пространстве имен http://schemas.xmlsoap.org/ws/2003/05/partner-link/.
Далее в создаваемом BPEL-процессе нужно указать типы партнерских связей, т.е. описать взаимодействие между BPEL-процессом, клиентом, который вызывает BPEL-процесс, и вовлеченными Web-сервисами. При этом определяются роли связей: для синхронных связей роль одна, для асинхронных роли две. В асинхронных операциях первая роль описывает вызов операции клиентом, вторая роль - вызов возвращения.
BPEL-процесс имеет следующую структуру::
Другими словами, структура имеет вид:
<process name=". . ." ... >
   <partnerLinks>
      <! -- Определение партнерских связей -->
   </partnerLinks>
   <variables>
      <!-- Определение переменных -->
   </variables>
   <sequence>
      <!-- Определение основной части BPEL бизнес-процесса -->
   </sequence>
</process>
В элементе <partnerLinks> каждая партнерская связь соотносится с определенным типом partnerLinkType, который характеризует ее. Каждая партнерская связь также специфицирует один или два атрибута.
Переменные (Variables) в BPEL-процессах используются, чтобы хранить, повторно форматировать и преобразовывать сообщения.
Основная часть BPEL-процесса определяет порядок, в котором вызываются партнерские Web-сервисы. Обычно старт начинается с тега <sequence>, который определяет несколько действий, которые будут выполнены последовательно. В этой последовательности надо сначала определить входное сообщение, которое запускает бизнес-процесс. Это делается с помощью тега <receive>, который ждет соответствующего сообщения. После получения сообщения BPEL-процесс выполняет остальные действия.
Пример 1
Пример описания партнерской связи, ее ролей и портов [1]:
<plnk:partnerLinkType name="travelLT">
  <plnk:role name="travelService">
    <plnk:portType name="tns:TravelApprovalPT" />
  </plnk:role>
  <plnk:role name="travelServiceCustomer">
    <plnk:portType name="tns:ClientCallbackPT" />
</plnk:role>
</plnk:partnerLinkType>
Пример структуры описания переменных:
   <variables>
      <!-- input for BPEL process  -->      
      <variable name=". . ." 
                messageType=". . ."/>
      <!-- input for  service S1-->
      <variable name=". . ." 
                messageType=". . ."/>
      <!-- output from service S1-->
      <variable name=". . ." 
                messageType=". . ."/>
      <!-- input service S2 -->
      <variable name=". . ." 
                messageType=". . ."/>
      <!-- output from service S2 -->
      <variable name=". . ." 
                messageType=". . ."/>
                             
      <!-- output from BPEL process -->
      <variable name=". . ." 
                messageType="..."/>
   </variables>
Пример структуры начала основной части:
<sequence>      
      <receive partnerLink="client" 
               portType=". . ." 
               operation=". . ." 
               variable=". . ."
               createInstance="yes" />
...
BPEL-процесс может выполняться на любом сервере приложений, имеющем механизм исполнения BPEL.
Имеются средства преобразования UML-моделей в наборы BPEL и WSDL-файлов, например, Emerging Technologies Toolkit 1.1 корпорации IBM.
Список литературы
1. Matjaz Juric. A Hands-on Introduction to BPEL. - http://www.oracle.com/technology/pub/articles/matjaz_bpel1.html