» Главная
eXcode.ru » Статьи » Другие » Интеграция приложений на основе WebSphere MQ
» Новости
» Опросы
» Файлы
» Журнал



Пользователей: 0
Гостей: 7





Программный интерфейс MQI. Основные функции




Общие сведения о разработке приложений для WebSphere MQ

В большинстве приложений, работающих с WebSphere MQ, решаются такие задачи как: чтение сообщений из базы данных (БД) и запись их в очередь; чтение сообщений из очереди и запись их в БД; и то и другое одновременно. В более редких случаях, например, для задач мониторинга осуществляется чтение параметров объектов WebSphere MQ в частности Current Depth, Channel Status, Message Count, Last Message Date/Time и т.п.

Для задач чтения/записи сообщений в очередь ведется работа непосредственно с сообщениями. На рис.8.1 показана структура одного из таких сообщений.

Структура сообщения
Рис. 8.1. Структура сообщения

Заголовок сообщения (Message Header) несет в себе служебную информацию: идентификационный номер сообщения (Message ID); идентификатор пользователя, пославшего сообщение; формат, длину, кодировку, тип сообщения, дату и время отправки и т.д. Данные в сообщении (Message Data) на уровне приложений разделяются на поля. В спецификации приложений записывается структура сообщения, например, в табл.8.1.

Таблица 8.1.
Имя поляДлина (байты)Примечание
Name50Для заполнения поля Account_Name таблицы Account
Account32Для заполнения поля Account таблицы Account
ClientNo32Для заполнения поля ClientNo таблицы Account
Detail4Для заполнения поля Detail таблицы Account
Account_Date10Дата в формате ′YYYY-MM-DD′ для заполнения поля Account_Date таблицы Account
Account_Time8Время в формате ′HH-MM-SS′ для заполнения поля Account_Time таблицы Account
Comment150Для заполнения поля Comment таблицы Account

В теле сообщения поля не имеют имен и идут в порядке перечисления в таблице 8.1. без разделителей (разделители могут быть использованы, но тогда длина сообщения увеличится). Числа (Integer, Long) записываются в символьном формате.

По WebSphere MQ интерфейсу (канал и соответствующие очереди) могут передаваться сообщения одного или нескольких типов, например, информация о клиентах, счетах и проводках. Для обработки сообщения большое значение имеет поле заголовка MSGTYPE, определяющее тип сообщения. Каждому типу сообщения соответствует своя структура данных сообщения (Message Data). По типу сообщения программа определяет, по какой ветви программы осуществлять разбор сообщения. С одной стороны, не целесообразно увеличивать число интерфейсов и, соответственно, число WebSphere MQ объектов и обрабатывающих программ, однако практические неудобства могут сказаться, если число WebSphere MQ объектов перевалит за несколько сотен и они все будут использоваться одновременно на недостаточно мощной технике. С другой стороны, программирование и внедрение программ облегчается, если на один тип сообщения создается один интерфейс и одна программа. Оптимальное решение следует искать где-то посередине между этими двумя подходами. К вопросам унификации интерфейсов следует вернуться (это будет сделано при рассмотрении одновременной работы WebSphere MQ и баз данных), так как создание и сопровождение нескольких сотен похожих программ для работы WebSphere MQ может вызвать серьезные затруднения.

Основу для программирования приложений, работающих с WebSphere MQ, предоставляет интерфейс очередей сообщений MQI (Message Queue Interface).

Приложения для работы с WebSphere MQ, создаваемые пользователем, могут использовать следующие группы функций MQI:

  • MQCONN, MQCONNХ и MQDISC. Эти функции обеспечивают подключение приложения к менеджеру очередей и отключение его.
  • MQOPEN и MQCLOSE функции открывают и закрывают подключение к очередям, с которыми работает приложение.
  • MQPUT и MQPUT1 функции обеспечивают помещение сообщений в очередь.
  • MQGET функция поддерживает просмотр, извлечение и удаление сообщений из очереди.
  • MQINQ функция позволяет запросить атрибуты WebSphere MQ объекта.
  • MQSET функция устанавливает атрибуты очереди, но атрибуты других типов WebSphere MQ объектов не могут быть изменены.
  • MQBEGIN, MQCMIT, MQBACK. Эти функции обеспечивают работу с WebSphere MQ транзакциями (открытие транзакции, закрытие и "откат" транзакции).

Таким образом, обобщенная структура программа для работы с WebSphere MQ на уровне блоков может быть представлена в виде следующей последовательности псевдокода:

Блок 1 MQCONN
Блок 2 MQOPEN
Блок 3 MQBEGIN
Блок 4 MQGET
Блок 5 SQL UPDATE, SQL SELECT
Блок 6 MQPUT
Блок 7 Если нет ошибок - MQCMIT, в противном случае MQBACK
Блок 8 MQCLOSE
Блок 9 MQDISC

Разработка приложений на основе WebSphere MQ может осуществляться на платформах: UNIX (AIX, HP_UX, Linux, Solaris), Windows, OS/390, OS400, OS/2 Warp и др. Полный список поддерживаемых платформ можно найти на сайте ИБМ: http://www.ibm.com/software/ts/mqseries/library/#announce

Для программирования приложений, работающих с WebSphere MQ, предлагается инструментарий на различных языках: C (для всех платформ), C++ (для большинства операционных систем), Visual Basic (для систем Windows), COBOL, Assembler (для мэйн-фреймов ИБМ с операционной системой z/OS), RPG, PL/I (для систем с z/OS, OS/2 Warp, VSE/ESA, Windows), TAL (для систем с Compaq NonStop Kernel) и другие средства.

В WebSphere MQ для приложений на C++ в среде Windows следует редактировать (линковать) разрабатываемую программу с библиотекой MQI в дополнение к библиотекам операционной системы:

  • mqm.Lib для WebSphere MQ Server для 32-bit C
  • mqic.Lib для WebSphere MQ Client для 16-bit C
  • mqic32.Lib для WebSphere MQ Client для 32-bit C

В качестве заголовочных файлов следует использовать cmqc.h или cmqcfc.h

Библиотека MQI обеспечивает реализацию функций WebSphere MQ. Список библиотек на других платформах, необходимых для разработки приложений на основе WMQ, можно найти в документации.

Следует упомянуть об интерфейсе приложений для передачи сообщений AMI (Application Messaging Interface), который является более простым и высокоуровневым интерфейсом, чем MQI. И хотя AMI имеет некоторые ограничения по сравнению с MQI, его функции достаточно эффективны для большинства пользователей. AMI поддерживает два типа моделей для программирования приложений: точка-точка, издатель-подписчик. Интерфейс AMI существует для языков C, C++ и Java, работающих в операционных системах: OS/400, AIX, HP-UX, Solaris, Microsoft Windows и z/OS.

В дальнейшем при описании функций интерфейса MQI будут использованы общие для всех функций два типа параметров: идентификатор (handle) и код возврата (return сode). При подключении к менеджеру очередей должен быть создан уникальный идентификатор этого менеджера для данного приложения, который называется идентификатором связи Hconn (connection handle). Идентификатор Hconn возвращается функциями MQCONN или MQCONNХ и передается во все другие функции как входной параметр. При работе с объектом WebSphere MQ должен также существовать уникальный идентификатор, называемый идентификатором объекта (object Handle). Этот идентификатор определяется функций MQOPEN при открытии объекта и возвращается как Hobj. Программа передает идентификатор объекта как входной параметр при вызове функций MQPUT, MQGET, MQINQ, MQSET или MQCLOSE.

Код завершения (completion code) и код ошибки (reason code) возвращаются как выходные параметры в каждой функции. Совместно они называются кодами возврата (return codes) и показывают результат выполнения функции. Код завершения возвращается либо как MQCC_OK или MQCC_FAILED, отображая успешное или ошибочное выполнение функции, соответственно. Иногда возвращается промежуточное значение MQCC_WARNING как предупреждение о неполном завершении. MQCC_OK всегда соответствует Reason code = 0. MQCC_WARNING может сопутствовать, например, Reason code = 2002, это говорит о том, что приложение уже подключено. MQCC_FAILED обязательно имеет детализацию, например: Reason code = 2058 - менеджер с данным именем неизвестен или недоступен, Reason code = 2035 - нет прав доступа и т.д. Программа может и должна использовать код ошибки в процессе обработки. Например, при определенном коде ошибки программа может выдать сообщение пользователю с предложением изменить входные данные и после этого повторить вызов функции либо вернуть сообщение пользователю. Коды возврата подробно описаны в книге WebSphere MQ Messages [7].

Основные функции WebSphere MQ

  1. MQCONN - функция подключения приложения к менеджеру очередей.

    Синтаксис:

    MQCONN (QmgrName, Hconn, CompCode, Reason)
    

    где:

    QmgrNam-имя менеджера очередей, к которому производиться подключение (латинские буквы, цифры, символы "_", "/", ".", "%" ).
    Hconn-идентификатор связи (connection handle) с менеджером очередей
    CompCode-код завершения, принимающий одно из трех значений: MQCC_OK, MQCC_WARNING, MQCC_FAILED
    Reason-код ошибки, детализирующий код завершения.

    Результат работы функции – установление связи с менеджером очередей и возвращение уникального идентификатора связи Hconn с менеджером. Имя QmgrNam может быть опущено (строка со значением Null или пробел), тогда обращение к менеджеру очередей на данном компьютере происходит по умолчанию. Одно из основных назначений функции – проверка авторизации пользователя (приложение работает под определенным пользователем с идентификатором userid, который может быть не авторизован для работы с данным менеджером или его объектами).

  2. MQOPEN – функция, открывающая подключение к очередям, с которыми работает приложение.

    Синтаксис:

    MQOPEN (Hconn, ObjDesc, Options, Hobj, 
            CompCode, Reason)
    

    где:

    Hconn-идентификатор связи (connection handle) с менеджером очередей
    ObjDesc-описание объекта MQOD
    Options-опции объекта MQOO
    Hobj-идентификатор связи с объектом
    CompCode-код завершения, принимающий одно из трех значений: MQCC_OK – успешное завершение, MQCC_WARNING – предупреждение, MQCC_FAILED – ошибочный вызов
    Reason-код ошибки, детализирующий код завершения.

    Результат работы функции – возвращение уникального идентификатора связи Hobj с "открытым" объектом WebSphere MQ, то есть очередью, с которой установлена связь. Описание объекта MQOD – это ссылка на структуру объекта из библиотеки WebSphere MQ. Структура MQOD представлена в таблице 8.2.

    Опции объекта (переменная MQLONG): MQOO_BROWSE* – просмотр объекта, MQOO_INPUT* – объект открыт для помещения сообщений, MQOO_OUTPUT – объект открыт для извлечения сообщений, MQOO_INQUIRE - объект открыт для извлечения атрибутов, MQOO_SET - объект открыт для изменения атрибутов и др. Опции объекта со звездочками задаются, как правило, в виде развернутых констант:

    • MQOO_INPUT_AS_Q_DEF - открытие очереди на основе ее определения;
    • MQOO_INPUT_SHARED - открытие очереди для одновременного доступа нескольких приложений;
    • MQOO_INPUT_EXCLUSIVE - открытие очереди для эксклюзивного доступа одному приложению;
    • MQOO_BROWSE - открытие очереди для просмотра/чтения сообщений с возможностью дальнейшего использования детализирующих опций MQGMO_BROWSE_FIRST, MQGMO_BROWSE_NEXT, MQGMO_BROWSE_MSG_UNDER_CURSOR функции MQGET;
    • MQOO_OUTPUT - открытие очереди для записи сообщений.

    Описание всех опций MQOO дано в главе "MQOPEN – Open object" [14] и объекта MQOD - в главе "MQOD – Object descriptor" [14]. Как правило, значений опций по умолчанию для MQOPEN вполне достаточно для программирования стандартных приложений для WebSphere MQ.

    Таблица 8.2. Структура объекта MQOD
    Имя поля MQODТип поляИмя константыЗначение по умолчанию
    StrucIdMQCHAR4MQOD_STRUC_ID′ODbb′
    VersionMQLONGMQOD_VERSION_11
    ObjectTypeMQLONGMQOT_Q1
    ObjectNameMQCHAR48НетСтрока со значением Null или пробел
    ObjectQMgrNameMQCHAR48НетСтрока со значением Null или пробел
    DynamicQNameMQCHAR48Нет′CSQ.*′ на z/OS; ′AMQ.*′ в противном случае
    AlternateUserIdMQCHAR12НетСтрока со значением Null или пробел
    RecsPresentMQLONGНет0
    KnownDestCountMQLONGНет0
    UnknownDestCountMQLONGНет0
    InvalidDestCountMQLONGНет0
    ObjectRecOffsetMQLONGНет0
    ResponseRecOffsetMQLONGНет0
    ObjectRecPtr NoneMQPTRНетУказатель со значением Null
    ResponseRecPtrMQPTRНетУказатель со значением Null
    AlternateSecurityIdMQBYTE40MQSID_NONENulls
    ResolvedQNameMQCHAR48НетСтрока со значением Null или пробел
    ResolvedQMgrNameMQCHAR48НетСтрока со значением Null или пробел
  1. MQGET - функция для просмотра, извлечение и удаление сообщений из очереди.

    Синтаксис:

    MQGET (Hconn, Hobj, MsgDesc, GetMsgOpts, 
           BufferLength,Buffer, DataLength, 
           CompCode, Reason)
    

    где:

    Hconn-идентификатор связи с менеджером очередей, полученный от MQCONN
    Hobj-идентификатор объекта, полученный от MQOPEN
    MsgDesc-описание сообщения MQMD
    GetMsgOpts-опции объекта MQGMO для чтения сообщений
    BufferLength-длина буфера Buffer, в который считывается сообщение
    Buffer-буфер, в который считывается сообщение
    DataLength-длина сообщения
    CompCode-код завершения, принимающий одно из трех значений: MQCC_OK, MQCC_WARNING, MQCC_FAILED
    Reason-код ошибки, детализирующий код завершения.

    Hconn и Hobj – это идентификаторы, полученные от MQCONN и MQOPEN, соответственно.

    Описание сообщения MQMD – это ссылка на структуру объекта из библиотеки WebSphere MQ. Эта структура записывается следующим образом (табл.8.3).

    Таблица 8.3. Структура объекта MQMD
    Имя поля MQMDТип поляИмя константыЗначение по умолчанию
    StrucIdMQCHAR4MQMD_STRUC_ID′MDbb′
    VersionMQLONGMQMD_VERSION_11
    ReportMQLONGMQRO_NONE0
    MsgTypeMQLONGMQMT_DATAGRAM8
    ExpiryMQLONGMQEI_UNLIMITEDMQEI_UNLIMITED
    FeedbackMQLONGMQFB_NONE0
    EncodingMQLONGMQENC_NATIVEВ зависимости от среды
    CodedCharSetIdMQLONGMQCCSI_Q_MGR0
    FormatMQCHAR8MQFMT_NONEПробел
    PriorityMQLONGMQPRI_PRIORITY_AS_Q_DEF-1
    PersistenceMQLONGMQPER_PERSISTENCE_AS_Q_DEF2
    MsgIdMQBYTE24MQMI_NONENulls
    CorrelIdMQBYTE24MQCI_NONENulls
    BackoutCountMQLONGНет0
    ReplyToQMQCHAR48НетСтрока со значением Null или пробел
    ReplyToQMgrMQCHAR48НетСтрока со значением Null или пробел
    UserIdentifierMQCHAR12НетСтрока со значением Null или пробел
    AccountingTokenMQBYTE32MQACT_NONENulls
    ApplIdentityDataMQBYTE32НетСтрока со значением Null или пробел
    PutApplTypeMQLONGMQAT_NO_CONTEXT0
    PutApplNameMQCHAR28НетСтрока со значением Null или пробел
    PutDateMQCHAR8НетСтрока со значением Null или пробел
    PutTimeMQCHAR8НетСтрока со значением Null или пробел
    ApplOriginDataMQCHAR4НетСтрока со значением Null или пробел
    GroupIdMQBYTE24MQGI_NONENulls
    MsgSeqNumberMQLONGНет1
    OffsetMQLONGНет0
    MsgFlagsMQLONGMQMF_NONE0
    OriginalLengthMQLONGMQOL_UNDEFINED-1

    Как видно из табл.8.3 из имени поля MQMD можно извлечь всевозможные атрибуты заголовка сообщений.

    GetMsgOpts – опции для функции MQGET - MQGMO (Get-message options), поля структуры которой приведены в таблице 8.4. Наиболее часто используемые опции для управления MQGET:

    • MQGMO_WAIT - определяет время ожидания функцией поступления новых сообщений в зависимости от значения в WaitInterval, заданногов мсек. MQGMO_NO_WAIT немедленно возвращает управление, если нет больше сообщений в очереди.
    • MQGMO_BROWSE_FIRST - определяет, что читается первое сообщение в очереди.
    • MQGMO_BROWSE_NEXT - определяет, что читается сообщение из текущей позиции.
    • MQGMO_BROWSE_MSG_UNDER_CURSOR - определяет, что читается сообщение под курсором.
    • MQGMO_LOGICAL_ORDER - определяет, что сообщения читаются в логическом порядке. Если опция опущена, то сообщения читаются в физическом порядке.
    • MQGMO_FAIL_IF_QUIESCING - выдает ошибку, если менеджер не доступен.
    • MQGMO_SYNCPOINT (MQGMO_NO_SYNCPOINT) - означает установку (отмену установки) контрольной точки (syncpoint control) на данном сообщении.
    • MQGMO_ACCEPT_TRUNCATED_MSG - указывает, что допускается отсечение данных сообщения, например, если DataLength для реального сообщения больше BufferLength.

    Все опции MQGMO даны в главе "MQGET – Get message" [14].

    BufferLength – длина в байтах области буфера Buffer, в который считывается сообщение (переменная типа MQLONG). Максимальная длина сообщений 100Мбт, длина по умолчанию 4Мбт, реальная длина большинства сообщений не более 10Кбт.

    Buffer - буфер, в который считывается сообщение.

    DataLength – длина сообщения в байтах (переменная MQLONG).

    Если DataLength для реального сообщения больше BufferLength, то часть сообщения может быть потеряна в зависимости от опции MQGMO_ACCEPT_TRUNCATED_MSG.

    CompCode, Reason – это стандартные возвращаемые параметры, упомянутые выше и не требующие детальных пояснений.

    Таблица 8.4. Поля структуры MQGMO
    Имя поля MQGMOТип поляОписание поляИмя константыЗначение по умолчанию
    StrucIdMQCHAR4Идентификатор структурыMQGMO_STRUC_ID′GMOb′
    VersionMQLONGНомер версии структурыMQGMO_VERSION_11
    OptionsMQLONGОпции для управления MQGETMQGMO_NO_WAIT0
    WaitIntervalMQLONGИнтервал ожидания (Wait interval) WaitIntervalNone0
    Signal1MQLONGСигналНетУказатель Null на z/OS; 0 в ост. случаях
    Signal2MQLONGИдентификатор сигналаНет0
    ResolvedQNameMQCHAR48Разрешенное имя очереди назначения (destination queue)НетСтрока string или пробел
    MatchOptionsMQLONGОпции управления критериями выбора, используемыми MQGETMQMO_MATCH_MSG_ID + MQMO_MATCH_CORREL_ID3
    GroupStatusMQCHARФлаг, индицирующий, что извлеченное сообщение находиться в группе сообщенийMQGS_NOT_IN_GROUP′b′
    SegmentStatusMQCHARФлаг, индицирующий, что извлеченное сообщение является сегментом логического сообщенияMQSS_NOT_A_SEGMENT′b′
    SegmentationMQCHARФлаг, индицирующий, что допускается дальнейшая сегментация для извлеченного сообщенияMQSEG_INHIBITED′b′
    Reserved1MQCHARРезервноеНет′b′
    MsgTokenMQBYTE16Маркер сообщения (Message token)MQMTOK_NONENulls
    ReturnedLengthMQLONGВозвращаемая длина сообщения в байтахMQRL_UNDEFINED-1
  1. MQPUT – функция для записи сообщений в очередь.

    Синтаксис:

    MQPUT (Hconn, Hobj, MsgDesc, PutMsgOpts, 
           BufferLength, Buffer, CompCode, Reason)
    

    где:

    Hconn-идентификатор связи с менеджером очередей, полученный от MQCONN
    Hobj-идентификатор объекта, полученный от MQOPEN
    MsgDesc-описание сообщения MQMD
    PutMsgOpts-опции MQPMO для записи сообщений
    BufferLength-длина буфера Buffer, откуда пишется сообщение. Значение 0 является действительным и показывает, что сообщение не содержит данных.
    Buffer-буфер, из которого пишется сообщение
    CompCode-код завершения, принимающий одно из трех значений: MQCC_OK, MQCC_WARNING, MQCC_FAILED
    Reason-код ошибки, детализирующий код завершения.

    Параметры Hconn, Hobj, MsgDesc, BufferLength, Buffer, CompCode, Reason – такие же, как и в функции MQGET. Исключение составляет PutMsgOpts – опция MQPMO (Put-message options), служащая для того, чтобы положить сообщение в очередь. Поля структуры MQPMO приведены в таблице 8.5.

    Таблица 8.5. Поля структуры MQPMO
    Имя поля MQPMOТип поляОписание поляИмя константыЗначение по умолчанию
    StrucIdMQCHAR4Идентификатор структурыMQPMO_STRUC_ID′PMOb′
    VersionMQLONGНомер версии структурыMQPMO_VERSION_11
    OptionsMQLONGОпции для управления MQPUT и MQPUT1MQPMO_NONE0
    TimeoutMQLONGЗарезервированоНет-1
    ContextMQHOBJИдентификатор объекта входной очередиНет0
    KnownDestCountMQLONGЧисло сообщений, посланное успешно в локальную очередьНет0
    UnknownDestCountMQLONGЧисло сообщений, посланное успешно в удаленную очередьНет0
    InvalidDestCountMQLONGЧисло сообщений, которые возможно не посланыНет0
    ResolvedQNameMQCHAR48Разрешенное имя очереди назначенияНетСтрока Null или пробел
    ResolvedQMgrNameMQCHAR48Разрешенное имя менеджера назначенияНетСтрока Null или пробел
    RecsPresentMQLONGЧисло записей помещенных сообщений или ответных записей в настоящее времяНет0
    PutMsgRecFieldsMQLONGФлаг, индицирующий, что MQPMR поле присутствуетMQPMRF_NONE0
    PutMsgRecOffsetMQLONGПогашение записи первого помещенного сообщения с момента старта MQPMOНет0
    ResponseRecOffsetMQLONGПогашение записи первого ответа с момента старта MQPMOНет0
    PutMsgRecPtrMQPTRАдрес записи первого помещенного в очередь сообщенияНетУказатель Null
    ResponseRecPtrMQPTRАдрес записи первого ответаНетУказатель Null

    Среди опций для управления MQPUT следует назвать:

    • MQPMO_NEW_MSG_ID - генерирует новый идентификатор сообщения
    • MQPMO_NEW_CORREL_ID - генерирует новый корреляционный идентификатор и заменяет поле CorrelId в опции MQMD этим идентификатором.
    • MQPMO_LOGICAL_ORDER - определяет, что сообщения в группах и сегментах пишутся в логическом порядке.
    • MQPMO_FAIL_IF_QUIESCING - выдает ошибку, если менеджер не доступен.
    • MQPMO_SYNCPOINT (MQPMO_NO_SYNCPOINT) - означает установку (отмену установки) контрольной точки (syncpoint control) на данном сообщении.
    • MQ_MSG_HEADER_LENGTH - определяется для очереди передачи (transmission queue)

    Полный список опций MQPMO дан в главе "MQPUT – Put message" [14].

    Функция MQPUT может положить сообщение как в локальную (local queue), так и в удаленную очередь (remote queue). MQGET считывает сообщения только из локальной очереди локального менеджера очередей, но не может читать сообщения на удаленном менеджере.

  2. MQCLOSE – функция, закрывающая подключение к очереди, с которой работает приложение.

    Синтаксис:

    MQCLOSE (Hconn, Hobj, Options, 
             CompCode, Reason)
    

    где:

    Hconn-идентификатор связи (connection handle) с менеджером очередей
    Hobj-идентификатор связи с объектом
    ObjDesc-описание объекта MQOD
    Options-опции объекта
    CompCode-код завершения
    Reason-код ошибки, детализирующий код завершения.
  3. MQDISC - функция для отключения приложения от менеджера очередей

    Синтаксис:

    MQDISC (Hconn, CompCode, Reason)
    

    где:

    Hconn-идентификатор связи (connection handle) с менеджером очередей
    CompCode-код завершения
    Reason-код ошибки

Для работы приложений в условиях промышленной эксплуатации необходимо использовать дополнительные функции WebSphere MQ.

Дополнительные функции WebSphere MQ

Одним из важнейших приемов прикладного программирования для WebSphere MQ является использование транзакций, аналогичных транзакциям в базах данных. С помощью функций MQBEGIN, MQCMIT, MQBACK можно открыть транзакцию, завершить транзакцию успешно и откатить транзакцию, соответственно. В этом механизме прослеживается полная аналогия с транзакциями в базах данных. Программирование с использованием WebSphere MQ транзакций позволяет создавать надежные программы.

  • MQBEGIN - функция, которая открывает WebSphere MQ транзакцию, координирует работу менеджера очередей и может использовать внешние ресурсы менеджера.

    Синтаксис:

    MQBEGIN (Hconn, BeginOptions, 
             CompCode, Reason)
    

    где:

    Hconn-К началу статьи




    Добавил: MadvEXДата публикации: 2006-02-28 01:20:54
    Рейтинг статьи:3.00 [Голосов 5]Кол-во просмотров: 9374

    Комментарии читателей

    Всего комментариев: 0
    Ваше имя: *
    Текст записи: *
Имя:

Пароль:



Регистрация

Какая OS удобнее, на ваш взгляд?
MS Windows / Vista
66% (194)
Linux
19% (57)
SunOS
1% (3)
QNX
1% (2)
BSD
4% (12)
MacOS
3% (8)
BeOS
1% (3)
Unix
1% (2)
Другая
4% (13)

Проголосовало: 294
Приходит студент-программист с утра весь злой. Его одногрупники спрашивают:
- Ты че такой злой?
- Да программу вчера всю ночь набивал.
- И что не заработала?
- Да нет, заработала.
- Может неправильно заработала?
- Да нет, правильно.
- А что тогда?
- Да на backspace уснул...
Рейтинг: 4/10 (3)
Посмотреть все анекдоты