A számítástechnika kezdeti napjaiban nem volt szükség elosztott tranzakciókra. Az alkalmazások számának növekedésével az adatok szinkronizálása fontos kérdéssé válik. A cégek sokat fizettek azért, hogy az adatáramlást tekintve szinkronizált rendszereket karbantartsanak. Ennek eredményeként létrejött az XA (eXtended Architecture) néven emlegetett 2 fázisú véglegesítési protokoll. Ez a protokoll ACID-szerű tulajdonságokat biztosít a globális tranzakciófeldolgozáshoz. Ebben a cikkben megpróbálom elmagyarázni az XA-tranzakciók részleteit és az XA-tranzakciók használatát a Spring keretrendszerben.

A 2 fázisú véglegesítési protokoll egy atomi végrehajtási protokoll elosztott rendszerek számára. Ez a protokoll, ahogy a neve is sugallja, két fázisból áll. Az első a véglegesítés-kérés fázis, amelyben a tranzakciókezelő koordinálja az összes tranzakciós erőforrást a véglegesítéshez vagy a megszakításhoz. A véglegesítési fázisban a tranzakciómenedzser úgy dönt, hogy véglegesítéssel vagy megszakítással zárja le a műveletet az egyes tranzakciós erőforrások szavazatainak megfelelően. A következő lépésben a 2PC protokoll megvalósításának részleteire térünk át.

Itt találhat forrásokat a Java + .NET 2PC-n keresztüli együttműködéséről.

Az XA tranzakciókhoz minden XA erőforráshoz globális tranzakcióazonosítóra és helyi tranzakcióazonosítóra (xid) van szükség. Minden XA erőforrás a start(xid) metódussal szerepel az XA Managerben. Ez a metódus azt jelzi, hogy az XA erőforrás részt vesz a tranzakcióban (legyen készen a műveletekre). Ezt követően a 2PC protokoll első fázisa a ready(xid) metódus meghívásával valósul meg. Ez a módszer OK vagy ABORT szavazást kér az XA erőforrástól. Miután megkapta az egyes XA erőforrások szavazatait, az XA Manager úgy dönt, hogy végrehajt egy véglegesítés(xid) műveletet, ha az összes XA erőforrás OK-t küld, vagy úgy dönt, hogy visszagörgetést (xid) hajt végre, ha egy XA erőforrás ABORT-ot küld. Végül az end(xid) metódus minden XA erőforráshoz meghívásra kerül, jelezve, hogy a tranzakció befejeződött. Nézze meg az ábrát, hogy jobban megértse. Miközben az XA tranzakció megvalósításának hátterét építjük, a következő lépésben mélyebbre megyünk, és látni fogjuk, hogy írja be ezt a parancsot ez a parancs a hibák és lehetséges megoldások parancsai.


Hibák bármikor előfordulhatnak hálózatvesztés, gépleállás és valamilyen rendszergazdai hiba miatt. Az XA-tranzakcióban ezeket a hibákat az előfordulásuk fázisai szerint kategorizáljuk. Az első hibafázis a protokoll indítása előtt van. Ez egy egyszerű hiba, amelyet a rendszernek nem kell visszaállítania vagy semmilyen műveletet nem kell végrehajtania. Csak nem az adott pillanatban végezzük el a műveletet. Másodszor írja be ezt a parancsot, ezt a parancsot ez a hibaparancs az előkészítés (commit-request) fázisban fordulhat elő, amely könnyen kezelhető az időtúllépési házirendek használatával történő visszagörgetésekkel. Végül, de nem utolsósorban a commit fázis meghibásodása, amely a nem teljes visszagörgetés és a lánc bármely problémája miatt fordulhat elő. A fenti helyzetekben a tranzakciókezelő megpróbálja helyreállítani a problémát. Legközelebb meglátjuk, hogyan próbálja a tranzakciókezelő leküzdeni a kudarcokat.

Helyreállításkor a tranzakciókezelő minden XA erőforrás helyreállítási metódusát hívja meg. Az XA Resources nyomon követi a naplókat, és megpróbálja újjáépíteni a legújabb állapotot. A Tranzakciókezelő lehívja a szükséges visszaállítási műveleteket, és a küldetés teljesítve. Ez a folyamat boldog útnak tűnhet, de sok kivételes helyzet van, amikor a naplók problémásak, például megsérülnek. Az ilyen helyzetekben a tranzakciókezelő bizonyos heurisztikát követ a probléma megoldása érdekében. Ezenkívül a helyreállítási folyamat az előreírási naplóktól függ, amelyekbe az alkalmazás előtt műveleti naplókat ír. Teljesítményproblémák esetén ezeket a naplókat saját formátumukban írják (nem használnak szerializálást), és a rendszernek jobb kötegelnie kell őket, ha lehetséges. Ezután a szórakoztató részre térünk át, amely az XA tranzakció támogatása a Spring keretrendszeren keresztül.

A Spring keretrendszer kiterjedt környezetet biztosít webes és önálló alkalmazások fejlesztéséhez. A többi segédprogramhoz hasonlóan az XA tranzakciókat is támogatja a Spring. Ez a támogatás azonban nem natív megvalósítás, és hibernált állapotot, webtárolót vagy olyan keretrendszert igényel, amely biztosítja az XA Tranzakciókezelést. A Spring rendelkezik a JtaTransactionManager-rel, amely tranzakciókezelési segédprogramokat biztosít, és elrejti a részleteket. Ily módon több adatforráshoz is rendelkezhetünk tranzakciókezeléssel, amelyek egyidejűleg frissülnek. Ha az XA Tranzakciókezelésről van szó, az XA-tranzakciók hibernált és webtárolók támogatása jól dokumentált, nem kell megemlíteni. Az XA-tranzakciókat biztosító keretrendszerrel való munka azonban zavaró lehet. Így ezt a bejegyzést a Bitronix Transaction Manager bemutatásával folytatom.

A Bitronix könnyen konfigurálható, miközben megfelelő támogatást nyújt a tranzakciókezeléshez. Önálló alkalmazásokban nem általánosan használják, de megpróbálom megadni az önálló alkalmazások konfigurációját az alábbiak szerint.

Mostantól több adatforrásunk is lehet, amelyeket az alábbiak szerint konfigurálhatunk. Minden adatforrásnak egyedi Name tulajdonsággal kell rendelkeznie, amely egyedi. Az alábbi konfiguráció az Oracle-re vonatkozik, más adatbázisok konfigurációja eltérő lehet. Minden egyéb részletet megtekinthet a Bitronix webhelyén.

Összefoglalva, megpróbáltuk elmagyarázni, mi az XA Transactions, az alapul szolgáló protokollok és a Bitronix Transaction Management integrációja a Spring-szel egy önálló alkalmazásban. A bővítés érdekében az XA Transactions lehetővé teszi a különböző adatforrások egyidejű módosítását. Ezenkívül az XA-tranzakciókat webtárolók vagy hibernált keretrendszerek támogatják. Ennek ellenére előfordulhat, hogy integrálnunk kell a tranzakciókezelést egy önálló alkalmazásba, amelyben be kell állítani a tranzakciókezelőt. Következésképpen az XA tranzakció konzisztens műveleteket biztosít több adatforráson, és a vállalatok használják ezeket.
Reméljük, hogy ez a cikk segített az XA tranzakciók végrehajtása (2 fázisú kötelezettségvállalás): egyszerű útmutató. Ha bármilyen további kérdése van, szívesen válaszolunk az Ön kérdésére; vegye fel velünk a kapcsolatot az alábbi részben. Ne felejtsd el megosztani signalfix.net családjával és barátaival!