BPEL
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>
Литература
- Understanding SOA with Web Services. By Eric Newcomer, Greg Lomow. Addison Wesley Professional 2004
- SOA for the Business Developer: Concepts, BPEL, and SCA. Ben Margolisand, Joseph Sharpe