Avatar billede gg Praktikant
15. januar 2002 - 08:59 Der er 1 løsning

Transaktioner i Java(J2EE)

Er der nogen der kan forklare mig hvad transaktioner er og hvad de bruges til. Ved bl.a at de bruges i J2EE miljøet, men kan ikke helt se fordelen i transaktioner
Avatar billede mortenezentia Nybegynder
15. januar 2002 - 10:43 #1
Transaktioner er en måde at samle eller gruppere flere operationer på. Man kræver at alle operationerne i transaktionen bliver udført med succes førend hele transaktionen er udført med succes.
Dette er praktisk i systemer hvori der indgår flere processer.
Tag eksempelvis et banksystem. Når der skal hæves penge på en konto foregår det måske som følger :

  if kontobeløb > HævetBeløb
    kontobeløb = kontobeløb - HævetBeløb

Er der nu to processer som begge ønsker at hæve fra samme konto risikere man at proces A først kontrollerer kontobeløb mod hævetbeløb. Herefter kontrollerer proces B kontobeløb mod hævetbeløb og derefter trækker de to processer deres hævetbeløb fra kontobeløb. Et problem vil opstå hvis der er 1000 kr på kontoen og begge hæver 800 kr. Proces A vil finde at 1000 kr > 800(A) kr og proces B vil finde at 1000 kr > 800(B) kr. Herefter vil A sænker kontobeløbet til 200 kr og B vil sænke det til -600 kr. Hvis man antager at kontobeløet skal være større end 0 er det således kommet under 0, uden at ens kode opdagede dette.

Dette problem løses med en transaktion. Når den fejler udføres der et såkaldt roll-back hvor alle operationer i transaktionen (indtil fejlen) (neutraliseres). Således vil fratræk af 800 kr fra kontobeløbet i et roll-back betyde et addition af 800 kr til kontobeløbet. Filmen køres faktisk baglæns og effekten alle de operation som er blevet udført inden fejlen ophæves.
En transaktion til ovenstående problem kan være som følger :
Start transaktion
  if kontobeløb > HævetBeløb
    kontobeløb = kontobeløb - HævetBeløb
  else
    fail
  if kontobeløb < 0
    fail
slut transaktion

Et roll back vil køre fra fail tilbage til start og kontoen vil være som om intet var hændt. I eksemplet med proces A og B vil proces A nå til slut da 200 kr > 0, mens B vil fejle da -600 < 0 og process B\'s transaktion vil lave rollback og lægge 800 kr til kontobeløbet og bringe det tilbage til 200 kr. Systemet vil være som om det kun var proces A der havde kørt.

Fordelen med en transaktion er altså at den kan annulleres undervejs. Selvfølgelig kan man selv kode annullering udenom transaktioner men på lang sigt vil ens kode risikere at blive rigtig grim, og multiproces (concurrent) kodning er ikke så nemt igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester