4. Транзакция по шаблону "Взаимные обязательства"

122. Транзакция по шаблону "Взаимные обязательства" может быть выполнена только в том случае, если респондент исполнил свою часть обязательств по запросу инициатора, уведомил его об этом и получил от него подтверждение, что его часть обязательств также успешно выполнена.

Если хотя бы одно из вышеперечисленных действий не может быть выполнено по каким-либо причинам, транзакция должна быть отменена как на стороне инициатора, так и на стороне респондента.

123. Инициатор отправляет респонденту сообщение-запрос в рамках транзакции общего процесса.

Респондент должен отправить сообщение-ответ до истечения времени, определенного как время для ответа.

В процессе выполнения транзакции общего процесса оба участника общего процесса должны отправлять друг другу сигналы-подтверждения "Получено" и "Принято в обработку".

124. В процессе выполнения транзакции общего процесса по шаблону "Взаимные обязательства" реализуется следующая последовательность обмена сообщениями:

инициатор отправляет в адрес респондента сообщение-запрос и ждет подтверждения получения запроса до истечения времени, определенного как время для подтверждения получения;

респондент принимает сообщение-запрос и отправляет инициатору сигнал-подтверждение "Получено";

инициатор после обработки принятого им от респондента сигнала-подтверждения "Получено" ждет подтверждения принятия в обработку информации, содержащейся в сообщении-запросе, до истечения времени, определенного как время для подтверждения обработки;

респондент проводит контроль данных, содержащихся в сообщении-запросе, в соответствии с регламентом информационного взаимодействия и подтверждает принятие в обработку полученной им информации, посылая инициатору сигнал-подтверждение "Принято в обработку";

инициатор после обработки полученного им от респондента сигнала-подтверждения "Принято в обработку" ждет получения сообщения-ответа с информацией до истечения времени, определенного как время для получения ответа;

респондент обеспечивает обработку принятого сообщения-запроса и отправляет инициатору сообщение-ответ, после чего ждет подтверждения инициатором получения сообщения-ответа до истечения времени, определенного как время для подтверждения получения;

инициатор принимает сообщение-ответ с информацией и как получатель информации подтверждает получение ответа, посылая респонденту сигнал-подтверждение "Получено";

респондент после обработки принятого им от инициатора сигнала-подтверждения "Получено" ждет подтверждения принятия в обработку информации, содержащейся в сообщении-ответе, до истечения времени, определенного как время для подтверждения обработки;

инициатор проводит контроль данных, содержащихся в ответе, в соответствии с регламентом информационного взаимодействия, подтверждает принятие в обработку полученной им информации, посылая респонденту сигнал-подтверждение "Принято в обработку", и ждет до истечения времени, определенного как время для подтверждения обработки, чтобы дать возможность респонденту просигнализировать об ошибке контроля при проверке полученного им уведомления о принятии в обработку или об истечении времени ожидания уведомления о принятии в обработку. Если по истечении времени для подтверждения обработки инициатор не получил сигнал-исключение "Ошибка контроля" и если все сигналы-подтверждения и сообщение-ответ получены до истечения времени, отведенного для их получения, то транзакция считается завершенной;

если инициатор не получил сигнал-подтверждение или сообщение-ответ до истечения времени, отведенного для их получения, он повторно инициирует транзакцию, если не исчерпано количество повторов.

Последовательность выполнения транзакции общего процесса по шаблону "Взаимные обязательства" представлена на рисунке 2.

┌───────────┐ ┌───────────┐

│:инициатор │ │:респондент│

└─────┬─────┘ └─────┬─────┘

Сообщение-запрос

├────────────────────────────────────────────────────────────>│

│ Сигнал-подтверждение "Получено" │

│<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤

│ Сигнал-подтверждение "Принято в обработку" │

│<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤

│ Сообщение-ответ │

│<────────────────────────────────────────────────────────────┤

│ Сигнал-подтверждение "Получено" │

│─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ >│

│ Сигнал-подтверждение "Принято в обработку" │

│─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ >│

│ │

Рис. 2. Последовательность выполнения транзакции общего

процесса по шаблону "Взаимные обязательства"