Главная
Статьи





08.11.2022


07.11.2022


07.11.2022


07.11.2022


06.11.2022






BPEL

20.01.2022

BPEL (англ. Business Process Execution Language) — язык на основе XML для формального описания бизнес-процессов и протоколов их взаимодействия между собой. BPEL расширяет модель взаимодействия веб-служб и включает в эту модель поддержку транзакций.

В общем виде конфигурация BPEL-проекта выглядит следующим образом:

  • BPEL-визуальный редактор;
  • Сервер управления бизнес-процессами.

Основные файлы BPEL-проекта:

  • .bpel — логический синтез и координация веб-служб. Фактически алгоритм исполнения бизнес-процесса. (его графическое представление напоминает блок-схему и диаграмму потоков данных в одном лице).
  • .wsdl — описание интерфейсов для обмена сообщениями. «Как достичь веб-службы» (WSDL).
  • .xsd — описание структур данных проекта (XML Schema).

История

Фирмы IBM и Microsoft определили два довольно схожих языка, WSFL и Xlang, соответственно. Рост популярности BPML, успех BPMI.org и открытое движение BPMS вынудили Intalio Inc., IBM и Microsoft принять решение объединить эти языки в новый язык — BPEL4WS. В апреле 2003, BEA Systems, IBM, Microsoft, SAP и Siebel Systems передали BPEL4WS 1.1 OASIS для стандартизирования по Web Services BPEL Technical Committee. Хотя BPEL4WS появился сразу в версиях 1.0 и 1.1, технический комитет WS-BPEL OASIS проголосовал 14 сентября 2004 назвать спецификацию WS-BPEL 2.0. Это изменение было сделано, чтобы выровнять BPEL с другими стандартами веб-сервисов, которые по соглашению об именовании начинаются на WS-.

В июне 2007, Active Endpoints, Adobe, BEA, IBM, Oracle и SAP опубликовали спецификации BPEL4People и WS-HumanTask, где описывалось как может быть реализовано в BPEL взаимодействие с людьми.

О дальнейшем направлении разработки BPEL разгорается жаркая дискуссия. Необходимость добавить семантику в BPEL в форме WS-HumanTask и прочего только подчёркивает тот факт, что BPEL никогда не был полноценным языком.

Пример BPEL

Гипотетический пример. BPEL-последовательность mathProcess принимает переменную $numIn возводит её в квадрат и возвращает результат в переменной $numOut.

<process name="mathProcess" targetNamespace="http://example.com/ws-bp/math" xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:math="http://manufacturing.org/wsdl/math"> <partnerLinks> <partnerLink name="Math" partnerLinkType="math:exampleMath" myRole="mathService" /> </partnerLinks> <variables> <variable name="numIn" messageType="math:unsignedInt"/> <variable name="numOut" messageType="math:unsignedInt"/> <variable name="num" type="xsd:unsignedInt"/> </variables> <sequence> <receive partnerLink="Math" portType="math:mathPort" operation="secondDegree" variable="numIn" createInstance="yes"/> <assign name="LoopCounterIncrement"> <copy> <from>$numIn.request</from> <to variable="num"/> </copy> <copy> <from>$num * $num</from> <to variable="numOut" part="response"/> </copy> </assign> <reply operation="secondDegree" partnerLink="Math" portType="math:mathPort" variable="numOut"/> </sequence> </process>