Опубликован: 10.06.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Компания IBM
Лекция 4:

Создание приложений для доступа к инфраструктуре WebSphere MQ

< Лекция 3 || Лекция 4: 123456 || Лекция 5 >

4.5. Транзакции и единицы работы

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

Базовым элементом, позволяющим регистрировать или отменять действия в рамках единицы работы как единую группу, служит транзакция. Нередко термины "транзакция" и "единица работы" используют как синонимы.

Транзакции WebSphere MQ позволяют фиксировать или аннулировать ряд действий над сообщениями в составе единицы работы. Над сообщениями в WebSphere MQ можно произвести две базовые операции.

  • Сообщение можно поставить в очередь. Это – первое действие приложения по отправке сообщения через инфраструктуру очередей, также каждый раз выполняемое каналом при размещении сообщения в транспортной очереди или очереди пункта назначения сообщения. Это действие называется постановкой сообщения в очередь или операцией put.
  • Сообщение можно извлечь из очереди. Этим занимается приложение или канал сообщений, переправляющий сообщение из транспортной очереди по каналу коммуникации.

    Это действие называется извлечением (изъятием) сообщения из очереди или операцией get.

4.5.1. Локальные единицы работы

По умолчанию единица работы может содержать только put - и get -операции. WebSphere MQ автоматически начинает единицу работы и также формирует транзакцию. Говорят, что единица работы локальна для WebSphere MQ.

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

4.5.2. Точка синхронизации

Локальные единицы работы автоматически создаются при первом выполнении приложением операций put или get. Условием этого является требование к WebSphere MQ осуществить данное действие под управлением точки синхронизации ( syncpoint ).

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

4.5.3. Фиксация и отмена

Локальная единица работы может стать завершенной в трех ситуациях.

  • Приложение фиксирует ( commit ) единицу работы. Значит, каждое действие этой единицы работы должно быть зарегистрировано. Об успешной или о неудачной фиксации единицы работы приложение будет проинформировано системой.
  • Приложение отменяет ( back out ) единицу работы. Значит, все действия данной единицы работы аннулируются, каждое сообщение возвращается в очередь, из которой было извлечено в этой единице работы операцией get, и удаляется из очереди, в которую было помещено в этой единице работы операцией put.
  • Приложение отключается от WebSphere MQ. Если отключение имело контролируемый характер, локальная единица работы фиксируется WebSphere MQ от имени приложения, и приложение получает уведомление, если фиксация закончилась неудачно. Однако если приложение завершает свою работу без управляемого отключения от WebSphere MQ, то, обнаружив подобное завершение, WebSphere MQ откатит все текущие единицы работы данного приложения.

4.5.4. Незафиксированные сообщения

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

Если сообщения извлекаются из очереди в пределах единицы работы (под управлением точки синхронизации), они становятся недоступны для других приложений сразу после выполнения get. Поэтому два приложения не могут извлечь из очереди одно и то же сообщение. Однако сообщения, изъятые из очереди за время единицы работы, реально не удаляются из очереди, пока данная единица работы не окажется зафиксирована. При аннулировании единицы работы все сообщения, изъятые за ее время из очереди, снова становятся доступными к изъятию для любых приложений.

В результате, если то же самое приложение повторно попытается произвести извлечение ( get ) в следующей единице работы, оно вполне может извлечь то же самое сообщение.

Сообщения, которые были помещены в очередь или изъяты из нее в пределах единицы работы, которая еще не зафиксирована и не отменена, называют незафиксированными (uncommitted).

Одновременно в каждом из подключений приложения к менеджеру может осуществляться лишь одна единица работы. Однако в разных потоках приложение может поддерживать несколько подключений. Поток – это средство, предоставляемое операционной системой или виртуальной машиной Java (JVM™ – Java Virtual Machine) для обеспечения возможности выполнять множество действий в одном приложении параллельно.

4.5.5. Глобальные единицы работы

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

Типичным набором действий, которые может произвести служба внутри системы, является:

  1. изъять из очереди сообщение-запрос;
  2. по его данным осуществить запросы к базе данных и ее обновления;
  3. отослать сообщения другим службам внутри системы для дополнительного обслуживания запроса;
  4. отослать ответ приложению, направившему запрос.

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

Единицы работы, включающие действия в WebSphere MQ и действия над другими ресурсами, называют глобальными.

4.5.6. Координация глобальных единиц работы

Транзакция, управляющая глобальной единицей работы, координируется менеджером транзакций (transaction manager), который должен иметь возможность общаться со всеми участниками данной единицы работы. Участники глобальной единицы работы носят название менеджеров ресурсов (resource manager). В предшествующем примере к занятым в глобальной единице работы менеджерам ресурсов относились WebSphere MQ и база данных.

WebSphere MQ может выступать в роли менеджера транзакций, который координирует глобальные единицы работы, включающие в качестве менеджеров ресурсов системы баз данных.

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

WebSphere MQ также может выступать в роли менеджера ресурсов глобальной единицы работы, координируемой внешним менеджером транзакций. Примерами внешних менеджеров транзакций являются IBM CICS\text{\textregistered} , TXSeries \text{\textregistered} и WebSphere Application Server.

Информацию о настройке WebSphere MQ как менеджера транзакций или менеджера ресурсов в глобальных единицах работы читайте в "лекции 9" "Configuring WebSphere MQ" руководства WebSphere MQ System Administration Guide, SC34-6584.

Примечание IBM поддерживает работу WebSphere MQ как менеджера транзакций только с определенным набором менеджеров ресурсов, а работу WebSphere MQ как менеджера ресурсов – только с определенным набором менеджеров транзакций.

4.5.7. Двухфазная фиксация

Действия всех участников глобальной единицы работы должны быть скоординированы для того, чтобы любой менеджер в любой момент времени мог сообщить о возникновении сбоя. Важнейший вид подобной координации известен как двухфазная фиксация (two-phase commit).

Двухфазная фиксация состоит из двух следующих шагов.

  1. Подготовка. Все менеджеры ресурсов, занятые в глобальной единице работы, получают запрос от менеджера транзакций и должны гарантировать, что они могут фиксировать эту единицу работы. После того, как менеджер ресурсов успешно завершил фазу подготовки к фиксации единицы работы, он больше не может потребовать ее аннулировать. С этого времени право отменить данную единицу работы принадлежит лишь менеджеру транзакций. Менеджер же ресурсов должен сохранять информацию о подготовленной к фиксации единице работы неопределенно долгое время, а именно до получения извещения от менеджера транзакций с требованием фиксации или отмены данной единицы работы.
  2. Фиксация. Если фаза подготовки к фиксации успешно завершена каждым из менеджеров ресурсов, то менеджер транзакций данной единицы работы информирует все менеджеры ресурсов о необходимости ее зафиксировать.

4.5.8. Спецификация XA

Спецификация XA опубликована организацией Open Group и описывает взаимодействия между менеджером транзакций и менеджером ресурсов. Ей отвечает и WebSphere MQ. Узнать подробнее о спецификации XA или загрузить ее текст можно на Web-странице по адресу: http://www.opengroup.org/bookstore/catalog/c193.htm

4.5.9. Расширенный транзакционный клиент

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

Однако во время координации глобальной единицы работы все менеджеры ресурсов, управляемые менеджером транзакций, должны присутствовать на той же машине, где расположен менеджер транзакций как таковой.

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

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

Примечание Данный продукт поставляется на условиях, отличных от принятых для клиентской инсталляции WebSphere MQ.

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

4.5.10. Отказоустойчивость и обработка ошибок

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

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

Если реализующее службу приложение испытывает проблемы при обработке сообщения, оно может произвести откат текущей единицы работы и вернуть сообщение в очередь. После этого сообщение снова становится доступным для обработки тем же или иным приложением, ожидающим сообщений из этой же очереди.

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

Если при обработке сообщения приложение неожиданно дает сбой, а единицу работы этого приложения координирует WebSphere MQ, то, обнаружив сбой приложения, WebSphere MQ автоматически отменит единицу работы и вернет сообщение в очередь.

Примечание WebSphere MQ может регистрировать сбой только всего процесса, но не потоков внутри него. Поэтому, если один поток неожиданно прерывается, текущая единица работы внутри него не завершается WebSphere MQ до окончания всего процесса.

Примером такого рода процесса является виртуальная машина языка Java (JVM) на сервере приложений J2EE. Если сервер выявит сбой в выполняемом приложении и закроет его, при том что приложение работало как Java-поток на виртуальной машине, WebSphere MQ не обнаружит завершения потока до окончания работы JVM в целом. Впрочем, серверы приложений J2EE имеют поддержку менеджмента транзакций и могут быть в состоянии урегулировать подобную ситуацию. WebSphere MQ можно настроить как менеджер ресурсов для единиц работы отдельных серверов приложений J2EE, включая WebSphere Application Server, как было сказано в "разделе 4.5.5" "Глобальные единицы работы".

< Лекция 3 || Лекция 4: 123456 || Лекция 5 >
Михаил Завалко
Михаил Завалко
Беларусь, Минск
Artem Bardakov
Artem Bardakov
Россия