Set

BPEL-процесс, как и любая другая web-служба, не обладает состоянием. И для того чтобы различать потоки событий от разных пользователей, чтобы определенное событие пришло именно для того документа заказа, для которого его отправил клиент, в BPEL предусмотрен набор идентификаторов, которые позволяют BPEL Engine'у различать экземпляры процессов (instances) и осуществлять маршрутизацию сообщений - это Correlation Sets.

Для данного процесса в качестве набора таких идентификаторов выступает идентификатор документа заказа (orderID). Наборы Correlation Set связываются с сообщениями, определенными в WSDL-документах web-службы для чего используются расширения языка BPEL для WSDL (файл properties.wsdl):

<bpws:property name="orderID" type="xsd:string"/>

<bpws:propertyAlias messageType="messages:cancelOrderMessage" part="orderID"

propertyName="tns:orderID" query="/webseller:cancelOrderID"/>

<bpws:propertyAlias messageType="messages:confirmOrderMessage" part="orderID"

propertyName="tns:orderID" query="/webseller:confirmOrderID"/>

Ссылка на объявленное свойство из BPEL-процесса:

<!-- Объявление набора -->

<correlationSets>

<correlationSet name="corellateOverOrderID" properties="cor:orderID"/>

</correlationSets>

<!-- Коррелирование событий по этому набору на примере события подтверждения заказа -->

<onMessage operation="confirmOrder" partnerLink="OrderProcessingLink"

portType="order-processing:WebSeller" variable="confirmOrderMessage">

<correlations>

<correlation initiate="yes" set="corellateOverOrderID"/>

</correlations>

<invoke inputVariable="deleteOrderMessage" name="DeleteOrder"

operation="deleteOrder" outputVariable="processVoidReply"

partnerLink="OrderStorageLink" portType="data:WebSellerDB"/>

</onMessage>

Обработка ошибок

В разработанном BPEL-процессе присутствуют два обработчика ошибок уровня процесса:

Глобальные обработчики ошибок BPEL-процесса WebSellerГлобальные обработчики ошибок BPEL-процесса WebSeller

Рисунок 7 Глобальные обработчики ошибок BPEL-процесса WebSeller

В случае возникновения ошибки с типом orderProcessingFault, необходимо удалить из БД ранее сохраненный заказ. Для этого в BPEL предусмотрена активность compensate, которая должна выполнить активность compensationHandler региона (Scope), переданного ей в качестве параметра. Такой обработчик объявлен в регионе ScopeOrder (см. Рисунок 4 Инициализация бизнес-процесса). Обработанные исключения выбрасываются на следующий уровень - клиенту, вызвавшему службу WebSeller.

 
< Пред   СОДЕРЖАНИЕ   Скачать   След >