Tuesday 1 June 2010

Gestiunea tranzacţiilor

În limbajul ingineriei software tranzacţiile reprezintă tehnologia care asigură integritatea datelor, controlând accesul concurent la date şi împiedicând actualizarea parţială în cazul apariţiei unei erori în mijlocul execuţiei unui program. Putem defini o tranzacţie ca pe un grup de operaţii dintre care fie se execută toate, fie nu se execută niciuna. O tranzacţie este o unitate indivizibilă de lucru (unit of work).
 
De exemplu, într-o aplicaţie de eLearning, modificarea unei note poate necesita mai mulţi paşi:

begin
  modifica nota
  recalculeaza media
  refa clasamentul
commit

O tranzacţie trebuie să fie atomică (se execută în totalitate sau nu se execută deloc), consecventă (păstrează integritatea bazei de date), izolată (stările intermediare ale sistemului nu sunt vizibile în exterior pâna la încheierea tranzacţiei) şi durabilă (înainte de încheierea tranzacţiei, modificările efectuate de aceasta vor fi scrise într-o memorie fizică, astfel încât să poată fi recuperate chiar în cazul unei căderi a sistemului) (ACID).

Tranzacţii gestionate de container

Într-o componentă de tip sesiune sau bazată pe mesaje care nu specifică tipul de gestiune a tranzacţiilor, codul pe care îl scrieţi nu va conţine instrucţiuni care să marcheze începutul sau sfârşitul tranzacţiilor, acestea fiind setate de către container. Containerul va începe, suspenda şi încheia tranzacţiile în funcţie de valoarea unui atribut specificat pentru fiecare metodă cu adnotarea @TransactionAttribute. Valoarea acestui atribut poate fi una dintre următoarele: REQUIRED, REQUIRES_NEW, MANDATORY, NOT_SUPPORTED, SUPPORTS, NEVER.

Semnificaţiile acestor valori sunt explicate în detaliu aici: http://java.sun.com/javaee/6/docs/tutorial/doc/bncij.html

Tranzacţii gestionate de componente

Interfaţa de programare JTA (Java Transaction API) defineşte metode pentru iniţierea şi terminarea explicită a tranzacţiilor (begin, commit, rollback).

No comments: