XA Transaksjoner (2 Fase Commit): En Enkel Guide

i de tidlige dagene av databehandling, var det ikke behov for distribuerte transaksjoner. Etter hvert som antall applikasjoner økte, blir synkronisering av dataene et viktig problem. Bedrifter betalte mye for å opprettholde synkroniserte systemer når det gjelder datastrøm. Som et resultat oppsto 2 phase commit-protokollen referert TIL SOM XA(eXtended Architecture). Denne protokollen gir SYRELIGNENDE egenskaper for global transaksjonsbehandling. Gjennom denne artikkelen vil jeg prøve å forklare detaljer OM xa-transaksjoner og bruk AV Xa-Transaksjoner I Spring framework.

2 fase commit protocol er en atom forpliktelse protokoll for distribuerte systemer. Denne protokollen som navnet antyder består av to faser. Den første er commit-request-fasen der transaction manager koordinerer alle transaksjonsressursene for å begå eller avbryte. I commit-fasen bestemmer transaction manager å fullføre operasjonen ved å begå eller avbryte i henhold til stemmene til hver transaksjonsressurs. Vi vil neste gå videre til implementeringsdetaljer FOR 2PC-protokollen.
*Se her for ressurser På Java+. NET Interoperabilitet GJENNOM 2PC.

xa-transaksjoner trenger en global transaksjons-id og lokal transaksjons-id(xid) for HVER xa-ressurs. HVER XA Ressurs er vervet TIL xa Manager ved start(xid) metode. Denne metoden forteller AT Xa-Ressursen er involvert i transaksjonen (vær klar for operasjoner). Etter det blir den første fasen AV 2pc-protokollen realisert ved å ringe prepare (xid) – metoden. Denne metoden ber OM OK eller AVBRYTE stemme FRA Xa Ressurs. ETTER å ha mottatt stemme fra HVER AV XA-Ressursene, bestemmer XA Manager seg for å utføre en commit (xid) – operasjon hvis ALLE Xa-Ressursene sender OK, eller bestemmer seg for å utføre en rollback (xid) hvis EN Xa-Ressurs sender ABORT. Endelig kalles end (xid) – metoden for HVER AV Xa-Ressursen som forteller at transaksjonen er fullført. Se på figuren for å forstå bedre. Når vi bygger en bakgrunn I xa-transaksjonsimplementering, vil vi neste gå dypere og se typer feil og mulige løsninger.


Feil kan oppstå når som helst på grunn av nettverkstap, maskin ned og noen administratorfeil. I xa-transaksjonen vil vi kategorisere disse feilene i henhold til fasene de oppstår. Den første feilfasen er før protokollen startes. Dette er en enkel feil at systemet ikke trenger å rulle tilbake eller noen form for operasjon. Vi gjør bare ikke operasjonen for det aktuelle øyeblikket. Andre typen feil kan oppstå på prepare (commit-request) fase som lett kan håndteres av rollbacks bruke timeout politikk. Sist men ikke minst er forplikte fasefeil som kan oppstå på grunn av ufullstendige rollbacks og eventuelle problemer i kjeden. I alle disse ovenfor situasjonen prøver transaction manager å gjenopprette problemet. Vi vil neste se hvordan transaction manager prøver å overvinne feil.

for gjenoppretting kaller transaksjonsbehandling gjenopprettingsmetode for HVER xa-ressurs. XA Resources spore loggene og prøver å gjenoppbygge sin nyeste tilstand. Transaction Manager kaller nødvendig rollback operasjoner og oppdrag er oppnådd. Denne prosessen kan synes å være lykkelig vei, men det er mange eksepsjonelle situasjoner der loggene er problematisk som å bli ødelagt. I slike situasjoner følger transaction manager noen heuristikk for å løse problemet. Videre er gjenopprettingsprosessen avhengig av skriveloggene der du skriver operasjonslogger før du søker. For ytelsesproblemer disse loggene er skrevet i sitt eget format (ikke bruker noen serialisering) og systemet bør bedre batch dem hvis mulig. Vi går neste til morsom del SOM ER XA transaksjonsstøtte Av Spring framework.

Spring framework gir omfattende miljø for å utvikle web og frittstående applikasjoner. SOM andre verktøy det gir, ER XA transaksjoner også støttet Av Våren. Denne støtten er imidlertid ikke en opprinnelig implementering og krever dvalemodus, webbeholder eller et rammeverk som gir Xa-Transaksjonsbehandling. Våren har JtaTransactionManager som gir transaksjonsadministrasjonsverktøy og skjuler detaljene. På denne måten kan vi ha transaksjonshåndtering for flere Datakilder som oppdateres samtidig. Når DET gjelder Å bruke Xa Transaksjonsbehandling, hibernate og web containere støtte FOR XA transaksjoner er godt dokumentert, trenger ikke å bli nevnt. Det kan imidlertid være forvirrende å jobbe med et rammeverk SOM gir xa-transaksjoner. Dermed vil jeg fortsette dette innlegget ved å introdusere Bitronix Transaction Manager.

Bitronix er enkelt konfigurert samtidig som det gir god støtte for transaksjonshåndtering. Det er ikke vanlig i frittstående programmer, men jeg vil prøve å gi konfigurasjon for frittstående program som følger.

<bean factory-method="getConfiguration" class="bitronix.tm.TransactionManagerServices"> <!--Disabling Jmx avoids registering JMX Beans to any container--> <property name="disableJmx" value="true" /></bean><bean factory-method="getTransactionManager" class="bitronix.tm.TransactionManagerServices" depends-on="bitronixTMConfig" destroy-method="shutdown"/><bean class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManager" ref="bitronixTM" /> <property name="userTransaction" ref="bitronixTM" /> <property name="allowCustomIsolationLevels" value="true" /></bean>

Vi kan nå ha flere datakilder som kan konfigureres som følger. Hver datakilde skal ha en unik egenskap som er unik. Nedenfor er konfigurasjonen For Oracle, andre databaser kan ha forskjellige konfigurasjoner. For andre detaljer, kan du sjekke Bitronix nettside.

<bean class="bitronix.tm.resource.jdbc.PoolingDataSource" init-method="init" destroy-method="close"> <property name="uniqueName" value="xaDataSource" /> <property name="minPoolSize" value="1" /> <property name="maxPoolSize" value="4" /> <property name="testQuery" value="SELECT 1 FROM dual" /> <property name="driverProperties"> <props> <prop key="URL">jdbc:oracle:thin:@10.6.86.24:1521:test</prop> <prop key="user">test</prop> <prop key="password">test</prop> </props> </property> <property name="className" value="oracle.jdbc.xa.client.OracleXADataSource" /> <property name="allowLocalTransactions" value="true" /></bean>

for å oppsummere har vi forsøkt å forklare HVA SOM ER XA-Transaksjoner, underliggende protokoller og Bitronix Transaction Management integrasjon Med Spring i en frittstående applikasjon. FOR å utvide, GIR Xa Transactions endre forskjellige datakilder samtidig. Videre STØTTES Xa-Transaksjoner av webbeholdere eller dvalemodus som rammer. Likevel må vi kanskje integrere transaksjonshåndtering til et frittstående program der vi må konfigurere transaksjonsbehandling. SOM følge AV DETTE gir xa transaction konsistente operasjoner på flere datakilder og selskaper bruker dem.
* Kuratorens notater og tilleggsressurser

You might also like

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.