XA (от , X/Open XA) — спецификация распределённых транзакций, определяющая принципы совместного участия транзакционных ресурсов в транзакции в условиях распределённых вычислений. Впервые описана в 1992 году, является фактическим стандартом реализации в менеджерах распределенных транзакций и реляционных базах данных.
XA-транзакция — распределённая транзакция, выполняемая под управлением системы, удовлетворяющей спецификации XA.
История К началу 1990-х годов существовало несколько различных стандартов распределённых транзакций, например, TPF, используемый и в гражданской авиации США и в 2010-е годыСм Transaction Processing: Concepts and Techniques, раздел 1.5, CISC, VMS и другие. Один из них, SNA от IBM стал к тому времени стандартом de facto. Под влиянием этого стандарта и стандарта LU6.2 ISO создала несколько новых стандартовСм Transaction Processing: Concepts and Techniques, раздел 2.7.4: Remote Operations Services (ROSE), определяющий как клиент вызывает сервер Commit, Concurrency Control, and Recovery (OSI-CCR), определяющий сообщение фиксации (commit) в пределах одной сессии Transaction Processing (OSI-TP), определяющий, как следует создавать идентификаторы транзакций и как ими управлять
Основным недостатком этих стандартов было отсутствие API, таким образом, они сообщали как менеджеры транзакций должны взаимодействовать, но не предоставляли правил написания переносимых приложений.
X/Open решил эту проблему, предоставив модель распределённых транзакций, и, одновременно с этим, специфицировав процедурный интерфейс взаимодействия участников транзакции (CLI), спецификацию XA.
Модель В XA используется модель распределенных транзакций, состоящая из трёх компонент: Прикладная программа (AP) — программа, определяющая, из каких частей должна состоять транзакция, какие менеджеры ресурсов (RM) использовать и так далее. По сути именно здесь описывается бизнес-логика. Менеджер распределенных транзакций (ТМ) — он же координатор, координирует работу RM и принимает решение о закреплении или откате транзакции, используя . RM, такие как СУБД, используются для хранения информации. Несмотря на то, что в модели фигурируют три компонента, спецификация XA определяет только взаимодействие между менеджерами ресурсов и транзакций.
Спецификация XA разделяет транзакции на локальные и глобальные. Локальные транзакции — самый простой вид транзакций, в них прикладная программа обращается только к одной СУБД и сама определяет, когда закреплять или откатывать транзакцию. То есть в них роль TM отводится AP. Глобальные (распределённые) транзакции — более сложный случай, в нём решение о фиксации изменений (commit) или откате (rollback) ложится на плечи координатора, прикладная программа определяет только границы транзакций. Менеджер транзакций делит одну глобальную транзакцию на несколько выполняющихся локально веток (), и при успешной фиксакции на каждой из веток осуществляет фиксацию всей глобальной транзакции, и осуществляет откат в противном случае.
Кроме того, спецификация поддерживает вложенные транзакции (), которые полезны, например, для журналирования.
XA+ В спецификации XA+, выпущенной в 1994 году, определяются также транзакции, распределенные относительно приложений. В XA+ появляется ещё один участник транзакции — менеджер по ресурсному взаимодействию (Communication Resource Manager, CRM), который отвечает за координацию между несколькими менеджерами распределённых транзакций, в этой модели он отвечает за новые ветви транзакции, которые, в свою очередь, содержат ещё несколько ветвей, а также за генерацию идентификаторов транзакций.
Стандарты, основанные на XA Несмотря на то, что XA специфицирует API лишь для языка Си, существуют реализации и на других языках программирования.
Java Transaction API — реализация XA для платформы J2EE, впервые выпущенная в 1999 году. В .Net Framework поддержка распределённых транзакций появилась лишь в версии 2.0, кроме XA, реализация распределённых транзакций .NET поддерживает OLEINFO: Connections May Not Participate in MTS/COM+ Transactions When You Use OLE DB Directly.
XA и OTS В спецификации Object Transaction Service от Object Management Group 1991 года вносится транзакционность в CORBA. Благодаря тому, что спецификация не разделяет участников транзакции на RM и TM, только на клиент и сервер, имеется возможно использовать XA и OTS в одном клиент-серверном приложении. Кроме того, если один из RM не поддерживает XA, но поддерживает OTS, то эта связка является единственно возможным решением проблемы распределённых транзакций в таком окружении.
Связка XA и OTS используется в Java EE, где обёрткой над OTS является Java Transaction Service, а Java Transaction API в свою очередь отделяет JTS от AP.
Примечания
Литература The XA Specification The XA+ Specification Transaction Processing: Concepts and Techniques Java Transaction Processing: Design and Implementation DTP Model
Ссылки https://www2.opengroup.org/ogsys/jsp/publications/PublicationDetails.jsp?publicationid=11415 - DTP model https://web.archive.org/web/20140123073914/http://docs.oracle.com/cd/E13085_01/doc/timesten.1121/e13068/jta.htm - взят отсюда с небольшими изменениями https://web.archive.org/web/20100709211701/http://www.webservices.org/weblog/mark_little/web_services_transactions_and_heuristics
Категория:СУБД Категория:Распределённые вычисления Категория:Компьютерные и телекоммуникационные стандарты