Обработка в режиме фиксации и уровень синхронизации

Выбранным режимом фиксации определяется разновидность операций фиксации, выполняемых IMS.

Режим фиксации описывает разновидность операций фиксации, выполняемых IMS. Клиент Java задает протокол режима фиксации при отправке запроса на выполнение транзакции в IMS. IMS Connect и IMS поддерживают два типа обработки в режиме фиксации: режим фиксации 0 (зафиксировать, потом отправить), в котором IMS фиксирует изменения базы данных IMS, а потом отправляет сообщение вывода клиенту, и режим фиксации 1 (оправить, потом зафиксировать), в котором IMS отправляет сообщение вывода клиенту, а потом фиксирует изменения базы данных.

IMS Connect и IMS поддерживают три уровня синхронизации для протоколов режима фиксации: NONE, CONFIRM и SYNCPT. В режиме фиксации 1 можно использовать любой из этих трех уровней синхронизации. В режиме фиксации 0 можно использовать только уровень CONFIRM.

Поскольку IMS Connector for Java автоматически предоставляет уровень синхронизации при подключении к IMS Connect, уровень синхронизации можно задать вручную через клиента Java, используя методsetSyncLevel(int) и установив для него значение NONE или CONFIRM. В настоящее время для клиента Java нельзя вручную установить уровень синхронизации SYNCPT. Для взаимодействий в режиме фиксации 1, уровнем синхронизации по умолчанию является NONE. Достаточно лишь установить значение свойства Interaction Verb SYNC_SEND_RECEIVE, не задавая уровень синхронизации. Для взаимодействий в режиме фиксации 0, уровнем синхронизации по умолчанию является CONFIRM. Достаточно лишь установить значение свойства Interaction Verb SYNC_SEND_RECEIVE и режим фиксации 0, не задавая уровень синхронизации. Если для метода setSyncLevel(int) будет задано другое цифровое значение, кроме 1 и 0, выдается сообщение об ошибке.

IMS Connector for Java поддерживает следующие сочетания:

Если клиент Java отправляет запрос на выполнение транзакции в режиме фиксации 1 с уровнем синхронизации CONFIRM, IMS Connector for Java передает запрос IMS через IMS Connect. IMS выполняет транзакцию и пытается отправить сообщение вывода клиенту Java через IMS Connector for Java. IMS Connector for Java отправляет положительное подтверждение в IMS от клиентаJava.IMS отправляет ответный код в IMS Connector for Java, с указанием того, зафиксированы ли изменения. Если да, IMS Connector for Java отправляет сообщение вывода клиенту Java. Если нет, клиент Java получает исключение. Если же в ходе этого процесса возникнут какие-либо ошибки, клиентJava получает исключение.

Тип исключительной ситуации также влияет на то, можно ли получить сообщение вывода. Например, если клиент Java получил сообщение IMSDFSMessageException, указывающее на то, что транзакция остановлена, значит приложение не было запущено, поэтому нет сообщения вывода. Однако если транзакция была запущена, но сообщение вывода не было получено IMS Connect до наступления тайм-аута выполнения, клиент Java получит сообщение EISSystemException о том, что достигнут тайм-аут выполнения. В этом случае сообщение вывода будет помещено в соответствующую очередь асинхронного вывода IMS OTMA или TPIPE для дальнейшего извлечения.

Примечание: В терминологии IMS/OTMA конвейер транзакций (TPIPE) - это логическое соединение между клиентом (IMS Connect) и сервером (IMS/OTMA). Для взаимодействий в режиме фиксации 0 TPIPE идентифицируется по ИД клиента, используемому для взаимодействия. Каждый ИД клиента, используемый в транзакции с режимом фиксации 0, имеет свой собственный TPIPE. Для взаимодействий в режиме фиксации 1 TPIPE идентифицируется по номеру порта IMS Connect, используемому для взаимодействия. Таким образом, с каждым портом связан TPIPE, который применяется всеми клиентами, выполняющими взаимодействия в режиме фиксации 1 через этот порт.

Независимо от того, в каком режиме фиксации клиент Java выполняет транзакцию IMS, клиент Java задает значение свойства interactionVerb объекта IMSInteractionSpec. Если указано взаимодействие в режиме фиксации 0, клиент Java может дополнительно задать свойство clientID объекта IMSConnectionSpec. clientID (ИД клиента) - это свойство объекта IMSConnectionSpec, которое определяет очередь асинхронного вывода IMS OTMA или конвейер TPIPE, куда помещаются те сообщения вывода, которые можно восстановить. Независимо от того, предоставляет ли клиент Java ИД клиента в режиме фиксации 0, взаимодействие зависит от типа соединения с сокетом, который использует клиент Java.

Для извлечения сообщений вывода из TPIPE клиент Java отправляет запрос, в котором он указывает одно из значений SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT или SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT для свойства interactionVerb объекта IMSInteractionSpec и значение свойства clientID объекта IMSConnectionSpec. Дополнительную информацию о поддержке асинхронного вывода можно найти в разделе Chapter 9: Protocols книги IMS Connect Guide and Reference.

Взаимодействия SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT или SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT можно использовать для извлечения сообщений вывода, помещенных в очередь любого ИД клиента, независимо от того, каким образом они поступили в очередь: в результате сбоя транзакции в режиме фиксации 0 или от приложения IMS, которое добавило сообщение в ALTPCB (альтернативный блок связи программ). В случае извлечения сообщения вывода транзакции в режиме фиксации 0, завершившейся сбоем, ИД клиента, предоставленный в IMSConnectionSpec для запроса извлечения, должен соответствовать ИД клиента, который был указан в данной транзакции.

Если в очереди асинхронного вывода OTMA нет сообщения, соответствующего данному ИД клиента, возникнет исключительная ситуация тайм-аута выполнения. Исключительная ситуация тайм-аута выполнения означает, что в очереди отсутствуют сообщения, или IMS Connect не может получить сообщение из очереди за указанный тайм-аут. Для взаимодействий SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT или SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT, как и для SYNC_SEND_RECEIVE, тайм-аут выполнения - это интервал времени, в течение которого IMS Connect ожидает ответа от IMS. Если для запроса извлечения не указано значение тайм-аута выполнения, используется значение тайм-аута выполнения по умолчанию. Значение тайм-аута по умолчанию - это значение TIMEOUT из настроек IMS Connect. Пользователю может потребоваться опытным путем определить оптимальное значение тайм-аута выполнения, чтобы сообщения вывода возвращались для всех типов взаимодействий.

Обработка в режиме фиксации и соединения с сокетом

Все соединения с сокетами, создаваемые адаптером ресурсов IMS, являются постоянными. Другими словами, одно и то же соединение между IMS Connector for Java и IMS Connect можно последовательно использовать для нескольких взаимодействий с IMS Connect. Соединение с сокетом не будет закрываться и открываться повторно между взаимодействиями. Постоянные сокеты бывают двух типов: общие и выделенные.

Общий постоянный сокет

Общий постоянный сокет могут последовательно использовать различные приложения, выполняющие взаимодействия в режиме фиксации 0 или 1. Для приложения, выполняющего взаимодействие в режиме фиксации 0 через общий постоянный сокет, адаптер ресурсов IMS автоматически создает ИД клиента с префиксом "HWS". Данный ИД клиента определяет соединение сокетов, а также связанный OTMA TPIPE. Для данного типа сокетов допускаются только ИД клиента, созданные адаптером ресурсов IMS. Пользовательский ИД клиента нельзя использовать для соединений с общим постоянным сокетом.

Прим.: Этот ИД клиента не следует путать с альтернативным ИД клиента - свойством IMSInteractionSpec, связанным с извлечением сообщений асинхронного вывода из любой очереди OTMA (TPIPE).
Прим.: В приложениях IMS которые помещают сообщения в альтернативный PCB, запрещается использовать имена, начинающиеся с "HWS" для альтернативных PCB.

Любое сообщение вывода, которое не удалось доставить клиенту Java, выполняющему взаимодействие в режиме фиксации 0 через соединение с общим постоянным сокетом, может быть помещено в очередь и извлечено позже. Кроме того, если взаимодействие в режиме фиксации 1 или 0 через общий постоянный сокет вызывает переключение с программы на программу, для которого запускается ещё одно взаимодействие в режиме фиксации 0 и создается вспомогательный вывод, то этот вывод можно получить позднее. Для общих постоянных сокетов поддерживаются взаимодействия SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT и SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT. Если не используется альтернативный ИД клиента, то при извлечении недоставленных сообщений вывода из очереди асинхронной блокировки IMS OTMA или TPIPE, команды взаимодействия необходимо вызывать из прежнего приложения клиента, так как должен применяться тот же ИД клиента, определяющий соединение с общим сокетом и связанный с ним OTMA TPIPE.

При использовании общих постоянных сокетов недоставленные сообщения вывода можно обрабатывать несколькими способами. Недоставленные сообщения вывода можно извлекать, указывая в значении свойства альтернативного ИД клиента объекта IMSInteractionSpec имя очереди блокировки OTMA, в которой находятся сообщения асинхронного вывода. Альтернативным образом, недоставленные сообщения вывода можно очистить. Для этого свойству "purgeAsyncOutput" объекта IMSInteractionSpec должно быть присвоено значение TRUE. Это свойство определяет, очищает ли IMS Connect недоставленный вывод I/O PCB. Свойство purgeAsyncOutput используется только для команды взаимодействия SYNC_SEND_RECEIVE. По умолчанию оно равно TRUE.

Для его применения свойству "reRoute" объекта IMSInteractionSpec нужно присвоить значение TRUE. Это свойство используется только для команды взаимодействия SYNC_SEND_RECEIVE. Если свойство reRoute равно TRUE, недоставленные сообщения вывода помещаются в целевое расположение, заданное приложением клиента в свойстве reRouteName. Если свойство reRoute равно TRUE, но reRouteName не определено, то используются данные из файла настроек IMS Connect. Если в файле настроек IMS Connect нет требуемого значения, используется значение HWS$DEF.

Соединения с общими постоянными сокетами создаются фабрикой соединений IMS.При этом существуют обязательные значения для следующих пользовательских свойств:
  • Имя хоста = имя хоста TCP/IP системы, в которой работает IMS Connect
  • Номер порта = номер порта
  • Имя хранилища данных = имя целевой IMS
  • CM0Dedicated = FALSE
Значение по умолчанию свойства CM0Dedicated равно FALSE, т.е. по умолчанию фабрикой соединений создаются соединения с общим постоянным сокетом.

Выделенный постоянный сокет

Выделенный постоянный сокет используется для приложений Java с взаимодействием в режиме фиксации 0. Он может последовательно использоваться несколькими приложениями с одинаковым пользовательским ИД клиента. Для данного типа сокетов допускаются только ИД клиента, указываемые пользователем. Допустимый ИД клиента:
  • Должен представлять собой строку из 1-8 алфавитно-цифровых (A-Z, 0-9) или специальных (@,#,$) символов.
  • Не может начинаться с "HWS".
  • Не должен совпадать с номером порта IMS Connect.
  • Строчные буквы автоматически преобразуются в заглавные

Как следует из названия, соединение с выделенным постоянным сокетом присваивается одному ИД клиента и остается связанным с этим ИД вплоть до отключения. Выделенные постоянные сокеты поддерживают взаимодействия SYNC_SEND_RECEIVE, SYNC_SEND, SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT и SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT.

Взаимодействия SYNC_RECEIVE_ASYNCOUTPUT, SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_NOWAIT и SYNC_RECEIVE_ASYNCOUTPUT_SINGLE_WAIT через выделенный постоянный сокет позволяют приложениям клиента получить сообщения, помещенные в очередь асинхронного вывода IMSOTMA в результате сбоя взаимодействия в режиме фиксации 0, приложением IMS, которое добавило сообщение в ALTPCB (альтернативный блок связи программ), или при перенаправлении вывода транзакции, выполнявшейся фабрикой общих соединений. Для извлечения сообщений приложение клиента должно предоставить ИД клиента, задающий TPIPE, в котором сохранены асинхронные сообщения вывода. Недоставленные сообщения вывода в выделенном постоянном сокете нельзя перенаправить или удалить.

Соединения с выделенными постоянными сокетами создаются фабрикой соединений IMS.При этом существуют обязательные значения как минимум для следующих пользовательских свойств:
  • Имя хоста = имя хоста TCP/IP системы, в которой работает IMS Connect
  • Номер порта = номер порта
  • Имя хранилища данных = имя целевой IMS
  • CM0Dedicated = TRUE

Для того чтобы фабрика соединений создавала соединения с выделенным постоянным сокетом, свойству CM0Dedicated должно быть присвоено значение TRUE.

Примечание: Если существует несколько фабрик соединений, настроенных на создание выделенных постоянных сокетов для одного экземпляра IMS Connect, только одна из них может связать сокет с определенным ИД клиента. Например, если первая фабрика соединений выделила соединение для ИД клиента CLIENT01, то при попытке второй фабрики выделить постоянное соединение для того же ИД клиента (при условии, что первое соединение с IMS Connect еще не закрыто) возникнет следующая исключительная ситуация:
javax.resource.spi.EISSystemException: ICO0001E:
Ошибка com.ibm.connector2.ims.ico.IMSTCPIPManagedConnection@23766050.processOutputOTMAMsg
(byte [], InteractionSpec,Record). IMS Connect сообщил об ошибке: RETCODE=[8],
REASONCODE=[DUPECLNT].
ИД клиента занят.

Освобождение постоянных сокетов

Соединение TCP/IP между IMS Connector for Java и IMS Connect является постоянным. Другими словами, оно остаётся открытым до тех пор, пока оно не будет закрыто IMS Connector for Java или IMS Connect из-за ошибки. Это соединение может быть как общим, так и выделенным. Выделенное соединение может использоваться для взаимодействий только с тем ИД клиента, который был указан при открытии соединения. Поэтому число соединений с выделенным постоянным сокетом возрастает с появлением новых ИД клиента.

Если число соединений ограничено, и задан тайм-аут соединения, то при достижении максимального числа открытых (и используемых) соединений возникнет исключительная ситуация ConnectionWaitTimeoutException по истечении указанного тайм-аута. Это стандартный алгоритм работы WebSphere Application Server. Исключительная ситуация ConnectionWaitTimeoutException может возникать для соединений как с выделенным, так и с общим постоянным сокетом.

Если при достижении максимального числа открытых соединений будет найдено хотя бы одно неиспользуемое соединение, то это соединение будет закрыто сервером WebSphere Application Server, а вместо него будет открыто новое соединение. Это также является стандартным алгоритмом работы WebSphere Application Server и относится к обоим видам постоянных соединений.


Комментарии