XA (fra den engelske udvidede arkitektur [1] , X/Open XA ) er en specifikation af distribuerede transaktioner , der definerer principperne for fælles deltagelse af transaktionsressourcer i en transaktion i et distribueret computermiljø . Først beskrevet i 1992, det er de facto implementeringsstandarden i distribuerede transaktionsadministratorer og relationelle databaser .
En XA-transaktion er en distribueret transaktion, der udføres under kontrol af et system, der er i overensstemmelse med XA-specifikationen.
I begyndelsen af 1990'erne var der flere forskellige standarder for distribuerede transaktioner, for eksempel TPF, der blev brugt i amerikansk civil luftfart og i 2010'erne [2] , CISC, VMS og andre. En af dem, IBM's SNA, var på det tidspunkt blevet de facto-standarden. Påvirket af denne standard og LU6.2-standarden har ISO skabt flere nye standarder [3] :
Den største ulempe ved disse standarder var manglen på en API , så de specificerede, hvordan transaktionsadministratorer skulle interagere, men gav ikke regler for at skrive bærbare applikationer.
X/Open løste dette problem ved at levere en distribueret transaktionsmodel og samtidig ved at specificere en proceduremæssig grænseflade til interaktion mellem deltagere i en transaktion (CLI), XA-specifikationen.
XA bruger en distribueret transaktionsmodel, der består af tre komponenter:
Selvom der er tre komponenter i modellen, definerer XA-specifikationen kun interaktionen mellem ressource- og transaktionsadministratorer.
XA-specifikationen opdeler transaktioner i lokale og globale. Lokale transaktioner er den enkleste type transaktioner, hvor applikationsprogrammet kun får adgang til ét DBMS og bestemmer, hvornår transaktionen skal forpligtes eller tilbageføres. Det vil sige, i dem er rollen som TM tildelt AP. Globale (distribuerede) transaktioner er et mere komplekst tilfælde, hvor beslutningen om at foretage ændringer eller tilbagerulning falder på koordinatorens skuldre, ansøgningsprogrammet bestemmer kun grænserne for transaktioner. Transaktionsmanageren opdeler en global transaktion i flere lokalt eksekverende filialer ( eng. branch ), og ved succesfuld commit på hver af filialerne, begår den hele den globale transaktion, og ruller tilbage ellers.
Derudover understøtter specifikationen indlejrede transaktioner , som er nyttige for eksempel til logning .
XA+ -specifikationen , udgivet i 1994, definerer også transaktioner fordelt på tværs af applikationer. I XA+ optræder en anden deltager i transaktionen - Communication Resource Manager (CRM), som er ansvarlig for at koordinere mellem flere ledere af distribuerede transaktioner, i denne model er han ansvarlig for nye grene af transaktionen, som igen indeholder flere flere filialer, samt til generering af transaktions-id'er.
Selvom XA kun specificerer en API til C-sproget, er der implementeringer i andre programmeringssprog.
Java Transaction API er en implementering af XA til J2EE -platformen , først udgivet i 1999. I .Net Framework dukkede understøttelse af distribuerede transaktioner kun op i version 2.0, bortset fra XA, understøtter .NET-implementeringen af distribuerede transaktioner OLE [4] .
1991 Object Management Group- specifikationen for Object Transaction Service introducerer transaktionalitet til CORBA . På grund af det faktum, at specifikationen ikke adskiller transaktionsdeltagere i RM og TM, kun i klient og server, er det muligt at bruge XA og OTS i én klient-server applikation. Derudover, hvis en af RM'erne ikke understøtter XA, men understøtter OTS, så er denne pakke den eneste mulige løsning på problemet med distribuerede transaktioner i et sådant miljø.
Kombinationen af XA og OTS bruges i Java EE, hvor indpakningen over OTS er Java Transaction Service , og Java Transaction API adskiller til gengæld JTS fra AP.