Для отслеживания множественных обменов сообщениями с длительным временем выполнения, характерных для взаимодействия между процессом BPEL и его партнерскими службами, в механизме служб BPEL используется механизм корреляции. Механизм корреляции позволяет направлять сообщения для соответствующих экземпляров процесса.
Сообщение диалога связывается с объединенным значением, установленным для одного или нескольких свойств, определенных в файле WSDL. Свойство представляет собой поле, находящееся в сообщении, идентифицируемое с использованием запроса. Запросы определяются при помощи специальных элементов – псевдонимов.
Таким образом, наборы корреляций используются для поддержки обмена между веб-службами стандартизованным способом, не зависящим от реализации. Наборы корреляций основываются на маркерах данных корреляции, хранящихся в конвертах сообщений, заголовках или, непосредственно, в рабочих документах. Объявление корреляции обуславливается объявленными свойствами сообщений.
В отношении корреляции применяются следующие термины:
Свойство представляет собой произвольным образом названный маркер. Он должен быть простого типа. Свойство определяется в файле WSDL.
Псевдоним свойства является правилом, определяющим способ привязки данных из сообщения к значению свойства в среде выполнения BPEL. Для свойства, которое будет использоваться в качестве значения корреляции, можно определить несколько псевдонимов. Это действие выполняется в случае, если одно и то же значение свойства должно быть отображено в нескольких сообщениях, что является типичным для корреляции. Например, если два различных сообщения имеют общую часть, которую необходимо извлечь, требуется одно свойство и два псевдонима свойств – по одному для каждого сообщения). Псевдонимы свойства определяются в файле WSDL.
Набор корреляций определяется в файле BPEL. Набор корреляций представляет собой составной ключ, сформированный из одного или нескольких значений свойств; фактически он является набором свойств. В среде выполнения BPEL этот ключ используется для маршрутизации сообщений к соответствующим экземплярам процесса для определенного диалога.
Корреляции отмечают действия, используются для идентификации наборов корреляций по именам и указывают на наборы корреляций, возникающие в переданных или полученных сообщениях.
Элементы, использующие и отражающие корреляцию
Наборы корреляций могут быть определены для элемента "Process". В дальнейшем они могут использоваться действиями передачи сообщений ("Invoke", "Reply" и "Receive"), описывающими диалог между процессом и партнерской службой.
Наборы корреляций действий "Invoke" применяются для проверки того, что исходящие сообщения содержат данные, соответствующие данным в определенных экземплярах набора корреляций.
Имена наборов корреляций также используются в ветвях "onMessage" элементов "Pick" и в варианте "onEvent" обработчиков события.
Если для действия необходима определенная для него корреляция, в среде IDE появится соответствующий запрос.
Определение корреляции. Мастер корреляций
Существует два способа определения корреляции:
Использование мастера корреляций, автоматически выполняющего все основные действия. Это самый простой и удобный способ определения корреляции. Как правило, глубокие знания о выполнении корреляции при этом не требуются. Все операции выполняются мастером.
Определение корреляции вручную
Мастер корреляций используется для определения корреляции двух действий передачи сообщений, таких как "Invoke", "Reply", "Receive", "OnEvent", или ветви "onMessage" элемента "Pick".
Примечание: Мастер позволяет лишь создавать корреляцию. Изменить корреляцию в мастере невозможно.
Создание корреляции с помощью мастера корреляций
В режиме проектирования щелкните правой кнопкой мыши действие, для которого необходима корреляция, и выберите "Define Correlation". Появится окно мастера корреляций.
Если для действия требуется корреляция, на диаграмме появится предупреждающая отметка.
Действие 1. Выбор действия передачи сообщений. В раскрывающемся списке выберите первоначальное действие передачи сообщений. Выбранное действие будет инициировать набор корреляций. Нажмите кнопку "Next".
Действие 2. Определение корреляции. В левой части располагается древовидная структура сообщения, отправляемого или получаемого при выполнении инициирующего действия. Справа представлена структура сообщения, передаваемого связанным действием. Соедините части сообщений, которые должны использоваться для определения корреляции, путем выбора узла на исходной панели с древовидной структурой и перемещения указателя мыши к узлу на целевой панели.
Корреляция установлена. Мастер создаст свойства и псевдонимы свойств в файле WSDL, определит набор корреляций в файле BPEL и свяжет набор корреляций с выбранными действиями.
Обратите внимание на то, что свойства и псевдонимы свойств записываются в новый файл WSDL, находящийся среди других файлов процесса модуля BPEL. Исходный файл WSDL партнерской службы импортируется в новый файл WSDL. Для всей корреляции, созданной с помощью мастера, оба свойства и псевдонимы свойств записываются в этот файл. Партнерские файлы WSDL импортируются. Набор корреляций, определенный в файле BPEL, ссылается на новый файл WSDL. При определении корреляции для нескольких действий передачи сообщений все свойства и информация псевдонимов свойств записываются в один файл WSDL.
Определение корреляции вручную
Определите одно или несколько свойств в файле WSDL с помощью редактора WSDL или перейдите к разделу Добавление свойства в файл WSDL.
Определите псевдонимы свойств в файле WSDL с помощью редактора WSDL или перейдите к разделу Добавление свойства в файл WSDL.
Определите набор корреляций для процесса в файле BPEL с использованием одного или нескольких ранее определенных свойств.
Определение набора корреляций:
В режиме проектирования щелкните правой кнопкой мыши элемент "Process" и выберите "Add > Correlation Set".
В качестве альтернативы в логическом представлении BPEL окна "Navigator" щелкните правой кнопкой мыши узел "Correlation Sets" и выберите "Add Correlation Set".
В диалоговом окне "Add Correlation Set" укажите имя набора корреляций и нажмите кнопку "Add" для добавления свойств.
В диалоговом окне "Property Chooser" разверните узел файла WSDL и выберите свойство, добавляемое к набору.
(Дополнительно) Отмените выбор флажка "Show Imported Files Only" для просмотра содержимого неимпортированного файла WSDL и файлов схемы XML.
По умолчанию в диалоговом окне "Property Chooser" отображаются только те файлы, которые уже были вызваны в процессе. Однако проект может содержать другие файлы .wsdl и .xsd, которые еще не были импортированы в процесс. При выборе типа нового свойства, определенного в файле, который не был импортирован, в среде IDE автоматически добавляется необходимая операция импорта для процесса BPEL.
Наборы корреляций, определенные для элемента "Process", имеют глобальную видимость. Имя набора корреляций должно быть уникальным среди имен других наборов корреляций.
Нажмите кнопку "OK".
Свяжите один или несколько наборов корреляций с сообщением, отправляемым или получаемым в действии "Receive", "Receive", "Reply" или "Pick".
В режиме проектирования дважды щелкните элемент ("Invoke", "Receive", "Reply", ветви "On Message" элемента "Pick" или элемент контейнера обработчиков события).
В редакторе свойств перейдите на вкладку "Correlations" и нажмите кнопку "Add".
В диалоговом окне "Choose a Correlation Set" разверните узел "Correlation Sets", выберите набор корреляций и нажмите кнопку "OK".
Выберите инициирующий атрибут для этого набора корреляций из раскрывающегося списка "Initiate". Можно выбрать один из следующих вариантов:
Yes. Действие должно инициировать набор корреляций.
Join. Действие должно инициировать набор корреляций, если набор корреляций еще не был инициирован.
No. Действие не должно инициировать набор корреляций. Это настройка по умолчанию.
Для действия "Invoke" определите шаблон сообщения.
В раскрывающемся списке "Pattern" выберите атрибут шаблона для указания на необходимость применения корреляции к исходящему сообщению (запрос), входящему сообщению (ответ) или к обоим видам сообщений (запрос-ответ).
(Дополнительно) При необходимости добавьте несколько наборов корреляций и нажмите кнопку "OK".