4. Транзакция по шаблону "Взаимные обязательства"
122. Транзакция по шаблону "Взаимные обязательства" может быть выполнена только в том случае, если респондент исполнил свою часть обязательств по запросу инициатора, уведомил его об этом и получил от него подтверждение, что его часть обязательств также успешно выполнена.
Если хотя бы одно из вышеперечисленных действий не может быть выполнено по каким-либо причинам, транзакция должна быть отменена как на стороне инициатора, так и на стороне респондента.
123. Инициатор отправляет респонденту сообщение-запрос в рамках транзакции общего процесса.
Респондент должен отправить сообщение-ответ до истечения времени, определенного как время для ответа.
В процессе выполнения транзакции общего процесса оба участника общего процесса должны отправлять друг другу сигналы-подтверждения "Получено" и "Принято в обработку".
124. В процессе выполнения транзакции общего процесса по шаблону "Взаимные обязательства" реализуется следующая последовательность обмена сообщениями:
инициатор отправляет в адрес респондента сообщение-запрос и ждет подтверждения получения запроса до истечения времени, определенного как время для подтверждения получения;
респондент принимает сообщение-запрос и отправляет инициатору сигнал-подтверждение "Получено";
инициатор после обработки принятого им от респондента сигнала-подтверждения "Получено" ждет подтверждения принятия в обработку информации, содержащейся в сообщении-запросе, до истечения времени, определенного как время для подтверждения обработки;
респондент проводит контроль данных, содержащихся в сообщении-запросе, в соответствии с регламентом информационного взаимодействия и подтверждает принятие в обработку полученной им информации, посылая инициатору сигнал-подтверждение "Принято в обработку";
инициатор после обработки полученного им от респондента сигнала-подтверждения "Принято в обработку" ждет получения сообщения-ответа с информацией до истечения времени, определенного как время для получения ответа;
респондент обеспечивает обработку принятого сообщения-запроса и отправляет инициатору сообщение-ответ, после чего ждет подтверждения инициатором получения сообщения-ответа до истечения времени, определенного как время для подтверждения получения;
инициатор принимает сообщение-ответ с информацией и как получатель информации подтверждает получение ответа, посылая респонденту сигнал-подтверждение "Получено";
респондент после обработки принятого им от инициатора сигнала-подтверждения "Получено" ждет подтверждения принятия в обработку информации, содержащейся в сообщении-ответе, до истечения времени, определенного как время для подтверждения обработки;
инициатор проводит контроль данных, содержащихся в ответе, в соответствии с регламентом информационного взаимодействия, подтверждает принятие в обработку полученной им информации, посылая респонденту сигнал-подтверждение "Принято в обработку", и ждет до истечения времени, определенного как время для подтверждения обработки, чтобы дать возможность респонденту просигнализировать об ошибке контроля при проверке полученного им уведомления о принятии в обработку или об истечении времени ожидания уведомления о принятии в обработку. Если по истечении времени для подтверждения обработки инициатор не получил сигнал-исключение "Ошибка контроля" и если все сигналы-подтверждения и сообщение-ответ получены до истечения времени, отведенного для их получения, то транзакция считается завершенной;
если инициатор не получил сигнал-подтверждение или сообщение-ответ до истечения времени, отведенного для их получения, он повторно инициирует транзакцию, если не исчерпано количество повторов.
Последовательность выполнения транзакции общего процесса по шаблону "Взаимные обязательства" представлена на рисунке 2.
┌───────────┐ ┌───────────┐ │:инициатор │ │:респондент│ └─────┬─────┘ └─────┬─────┘ Сообщение-запрос ├────────────────────────────────────────────────────────────>│ │ Сигнал-подтверждение "Получено" │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ │ Сигнал-подтверждение "Принято в обработку" │ │<─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ │ Сообщение-ответ │ │<────────────────────────────────────────────────────────────┤ │ Сигнал-подтверждение "Получено" │ │─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ >│ │ Сигнал-подтверждение "Принято в обработку" │ │─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ >│ │ │
Рис. 2. Последовательность выполнения транзакции общего
процесса по шаблону "Взаимные обязательства"