Общий постоянный сокет могут последовательно
использовать различные приложения, выполняющие взаимодействия в режиме фиксации
1 (CM1) или 0 (CM0).
Для приложения, выполняющего взаимодействие в режиме фиксации 0
через общий постоянный сокет, IMS TM автоматически создает ИД клиента с префиксом HWS. Данный ИД клиента представляет и определяет соединение сокетов, а
также связанный tpipe OTMA. Для данного типа сокетов допускаются только ИД
клиентов, созданные адаптером ресурсов IMS TM. Если вы укажете ИД клиента для
соединения, не определенного как CM0 через общий постоянный сокет, то будет
выдана и возвращена клиенту исключительная ситуация.
Ограничение: В приложениях IMS,
которые помещают сообщения в альтернативный PCB, запрещается использовать
имена, начинающиеся с HWS, для альтернативных PCB. Адаптер ресурсов IMS TM не может извлечь сообщения HWS.
Совет: ИД клиентов отличаются от альтернативных ИД клиентов. Альтернативный ИД клиента - свойство класса IMSInteractionSpec. Альтернативные ИД клиентов используются для извлечения сообщений асинхронного вывода из очередей блокировки OTMA (tpipes).
Поддерживаемый режим фиксации и взаимодействия
Общий постоянный сокет можно использовать
для приложений Java™, выполняющих взаимодействия в режиме фиксации 0 или 1.
Табл. 1. Поддерживаемые режимы фиксации, команды взаимодействия и уровни синхронизации для разных типов сокетов| Режим фиксации |
Тип сокета |
Команда взаимодействия |
ИД клиента |
Уровень синхронизации |
| CM1 |
Общие постоянные |
- SYNC_END_CONVERSATION (для диалоговых транзакций)
- SYNC_SEND_RECEIVE
|
Автоматически создаются и управляются |
Нет или Подтвердить |
| CM0 |
Общие постоянные |
- SYNC_SEND
- SYNC_SEND_RECEIVE
- SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT
- SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT
- SYNC_RECEIVE_CALLOUT (для программной модели неуправляемых внешних вызовов)
|
Автоматически создаются и управляются |
Подтвердить |
| Выделенный постоянный |
- SYNC_SEND
- SYNC_SEND_RECEIVE
- SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT
- SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT
|
Задается приложениями клиентов (свойство clientID) |
Подтвердить |
Команда взаимодействия SYNC_RECEIVE_ASYNCOUTPUT
не используется и заменяется на SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT.
Извлечение сообщений
Любое выходное сообщение, которое не удалось доставить клиенту
Java,
выполняющему взаимодействие в режиме фиксации 0 через соединение с общим
постоянным сокетом, может быть помещено в очередь и извлечено позже. Кроме
того, вспомогательный вывод всегда рассматривается как вывод CM0 и может быть
повторно помещен в очередь для извлечения в будущем.
Рассмотрим ситуацию, в
которой взаимодействие CM1 или CM0 через общий постоянный сокет переключает с
одной программы на другую. Если обе программы возвращают вывод, то второе
возвращенное выходное сообщение считается выводом CM0. Его можно вновь
поставить в очередь и извлечь позже.
Если взаимодействие в режиме фиксации 1 или 0 через общий
постоянный сокет создает переключение с программы на программу, для которого
запускается еще одно взаимодействие в режиме фиксации 0 и создается
вспомогательный вывод (который всегда будет выводом CM0), то этот вывод можно
вернуть в очередь и извлечь позже.
Если недоставленные выходные сообщения,
помещенные в очередь асинхронной блокировки OTMA или tpipe
IMS,
не извлекаются с помощью альтернативного ИД клиента, то команды исходного
взаимодействия и извлечения необходимо вызывать из того же клиентского
приложения через то же соединение с сокетом. И для исходного взаимодействия, и
для извлечения любого асинхронного вывода из этого взаимодействия следует
применять тот же сгенерированный ИД клиента, который идентифицирует соединение
с общим сокетом и связанный tpipe OTMA.
При использовании общих постоянных сокетов недоставленные
выходные сообщения можно обрабатывать несколькими способами.
- Недоставленные выходные сообщения можно извлекать, указывая в свойстве
альтернативного ИД клиента объекта IMSInteractionSpec имя очереди блокировки
OTMA, в которой находятся сообщения асинхронного вывода.
- Можно очистить недоставленный вывод. Для этого свойству purgeAsyncOutput
объекта IMSInteractionSpec должно быть присвоено значение true. Это свойство
определяет, очищает ли
IMS
Connect недоставленный вывод PCB ввода-вывода. Свойство purgeAsyncOutput
используется только для команды взаимодействия SYNC_SEND_RECEIVE. Если свойство не задано в SYNC_SEND_RECEIVE, по умолчанию используется значение true.
- Можно перенаправить сообщения в другое место. Для его
применения свойству reRoute объекта IMSInteractionSpec нужно присвоить значение
true. Это свойство допустимо только для глаголов взаимодействия
SYNC_SEND_RECEIVE и SYNC_SEND. Если свойству reRoute присвоено значение true,
то недоставленные выходные сообщения помещаются в целевое расположение, обычно
задаваемое клиентским приложением. Это расположение задается в свойстве
reRouteName объекта IMSInteractionSpec. Если свойство reRoute равно true, но
reRouteName не определено, то используются данные из файла конфигурации
IMS
Connect. Если в файле конфигурации
IMS
Connect нет требуемого значения, используется значение HWS$DEF.
Соединения с общим постоянным сокетом
Соединения с общими постоянными сокетами создаются фабрикой соединений
IMS.
При этом существуют обязательные значения для следующих пользовательских
свойств:
- Имя хоста: имя хоста TCP/IP системы, в которой выполняется
IMS
Connect.
- Порт: связанный порт
- Имя хранилища данных: имя целевой IMS
- Выделенный в CM0: false
Значение по умолчанию свойства CM0Dedicated равно
false, т.е. по
умолчанию фабрикой соединений создаются соединения с общим постоянным сокетом, если для свойства CM0Dedicated не задано значение
true.