XA (z anglického extended architecture [1] , X / Open XA ) je specifikace distribuovaných transakcí , která definuje principy pro společnou účast transakčních zdrojů na transakci v distribuovaném výpočetním prostředí . Poprvé byl popsán v roce 1992 a je de facto implementačním standardem ve správcích distribuovaných transakcí a relačních databázích .
Transakce XA je distribuovaná transakce prováděná pod kontrolou systému, který odpovídá specifikaci XA.
Na počátku 90. let existovalo několik různých standardů pro distribuované transakce, například TPF, používaný v americkém civilním letectví a v roce 2010 [2] , CISC, VMS a další. Jeden z nich, IBM's SNA, se do té doby stal de facto standardem. Vlivem tohoto standardu a standardu LU6.2 vytvořila ISO několik nových standardů [3] :
Hlavní nevýhodou těchto standardů byl nedostatek API , takže specifikovaly, jak by měli transakční manažeři interagovat, ale neposkytly pravidla pro psaní přenosných aplikací.
X/Open tento problém vyřešil poskytnutím modelu distribuovaných transakcí a zároveň specifikací procedurálního rozhraní pro interakci účastníků transakce (CLI), specifikace XA.
XA používá model distribuovaných transakcí, který se skládá ze tří komponent:
Přestože model obsahuje tři komponenty, specifikace XA definuje pouze interakci mezi manažery zdrojů a transakcí.
Specifikace XA rozděluje transakce na lokální a globální. Místní transakce jsou nejjednodušším typem transakcí, ve kterých aplikační program přistupuje pouze k jednomu DBMS a určuje, kdy transakci potvrdit nebo vrátit zpět. To znamená, že v nich je role TM přidělena AP. Globální (distribuované) transakce jsou složitějším případem, kdy rozhodnutí o provedení změn či rollbacku padá na bedra koordinátora, aplikační program určuje pouze hranice transakcí. Transakční manažer rozdělí jednu globální transakci do několika lokálně prováděných větví ( angl. branch ) a po úspěšném potvrzení na každé z větví potvrdí celou globální transakci a jinak se vrátí zpět.
Specifikace navíc podporuje vnořené transakce , které jsou užitečné například pro protokolování .
Specifikace XA+ , vydaná v roce 1994, také definuje transakce distribuované napříč aplikacemi. V XA + se objeví další účastník transakce - Communication Resource Manager (CRM), který je zodpovědný za koordinaci mezi několika manažery distribuovaných transakcí, v tomto modelu je zodpovědný za nové větve transakce, které naopak obsahují několik dalších poboček a také pro generování ID transakcí.
Ačkoli XA specifikuje API pouze pro jazyk C, existují implementace v jiných programovacích jazycích.
Java Transaction API je implementace XA pro platformu J2EE , poprvé vydaná v roce 1999. V .Net Frameworku se podpora distribuovaných transakcí objevila až ve verzi 2.0, kromě XA implementace distribuovaných transakcí .NET podporuje OLE [4] .
Specifikace Object Management Group pro Object Transaction Service z roku 1991 zavádí do CORBA transakční schopnost . Vzhledem k tomu, že specifikace nerozděluje účastníky transakce na RM a TM, pouze na klienta a server, je možné používat XA a OTS v jedné klient-server aplikaci. Pokud navíc jeden z RM nepodporuje XA, ale podporuje OTS, pak je tento bundle jediným možným řešením problému distribuovaných transakcí v takovém prostředí.
Kombinace XA a OTS se používá v Java EE, kde obalem nad OTS je Java Transaction Service a Java Transaction API zase odděluje JTS od AP.