J2EE
útikalauz Java programozóknak

Tranzakciók, a JDBC és a JTA

Kozsik Tamás

Explicit tranzakciókezelés nélkül

A példaprogramunk legelső változata. A példakörnyezet UNIX operációs rendszert és MySQL adatbáziskezelőt tételez fel localhost számítógépen, és azt, hogy egy "bank" nevű adatbázis létre van hozva. Ebben az adatbázisban a megfelelő táblákat a "mysql bank <bank.mysql" paranccsal hozhatjuk létre. Ezután fordítsuk és futtassuk a példaprogramot a "runme.mysql" paranccsal!

A szükséges fájlok a 01 alkönyvtárban találhatók.

Javított változat, több kivételkezeléssel

Csinosítottunk programon, a példakörnyezet viszont maradt ugyanolyan.

A szükséges fájlok a 02 alkönyvtárban találhatók.

JDBC tranzakciók

JDBC tranzakciókat használunk ebben a példaprogramban. A példakörnyezet ismét UNIX operációs rendszert tételez fel, de most PostgreSQL adatbáziskezelővel. Feltesszük, hogy létre van hozva egy "bank" adatbázis, amihez a "felhasznalo" felhasználói névvel és a "jelszo" jelszóval hozzákapcsolódhatunk. A táblák létrehozásához ismét használható egy SQL szkript: "psql bank <bank.psql". Fordítás és futtatás: "runme.psql".

A szükséges fájlok a 03 alkönyvtárban találhatók.

JDBC tranzakciók enterprise bean-ekből

Példaprogramunk ezen változatában használunk először enterprise bean-eket. Ismét UNIX operációs rendszert, valamint a SUN-féle J2SDK EE 1.3 használatát (Cloudscape adatbáziskezelővel) tételezzük fel. Telepítéskor kérjük a kliens JAR-fájl létrehozását (atutalasClient.jar)! Futtatás: "runme". (Alapértelmezés szerint a "guest" felhasználói nevet és a "guest123" jelszót használhatjuk arra, hogy az alkalmazás szerver felé azonosítsuk kliens alkalmazásunkat.)

A szükséges fájlok a 04 alkönyvtárban találhatók.

JTA tranzakciók

A JDBC eszközkészlete helyett most a JTA-t használjuk tranzakcióink programozott demarkációjához. A példakörnyezet nem változott.

A szükséges fájlok a 05 alkönyvtárban találhatók.

Deklaratív tranzakció-demarkáció

Programozott tranzakció-demarkáció helyett deklaratív demarkációt használunk példaprogramunk ezen változatában.

A szükséges fájlok a 06 alkönyvtárban találhatók.

Tranzakciós attribútum: a Required érték

Az átutaló bean-ről áttérünk a számlakezelő bean-re, hogy megvizsgálhassuk a tranzakciós attribútum szerepét. Ebben a példában két J2EE kliens alkalmazást is lefuttatunk egymás után.

A szükséges fájlok a 07 alkönyvtárban találhatók.

Tranzakciós attribútum: a RequiresNew érték

A következő három példa a RequiresNew érték használatát szemlélteti. A szükséges fájlok az alábbi alkönyvtárban találhatók:

Tranzakciós attribútum: a Supports érték

Egy újabb bean, a beléptető bean tűnik fel ebben a példában. A "naplóz" metódus tranzakciós attribútumát itt a Supports értékre állítottuk. Ha a runme fájlban az egyik "Tudor"-t átírjuk például "Vidor"-ra, a kliens alkalmazásunk egy "VedelemException" kivétellel ér véget.

A szükséges fájlok a 11 alkönyvtárban találhatók.

Tranzakciós attribútum: a NotSupported érték

Két példaprogram illusztrálja a NotSupported tranzakciós attribútumérték használatát:

Izoláció: READ_UNCOMMITTED

A "piszkos adatok olvasása" anomáliát mutatjuk be ezzel a példával. Futtatásához olyan adatbáziskezelő rendszerre van szükség, amelyik támogatja a TRANSACTION_READ_UNCOMMITTED izolációs szintet. A példakörnyezet Microsoft SQL Server meglétét tételezi fel a "szerver" nevű számítógépen, valamint azt, hogy az "sa" felhasználói névvel és az üres jelszóval be is lehet rá jelentkezni. Fordításhoz és futtatáshoz a runme.mssql parancsot adhatjuk ki egy UNIX-os munkaállomáson, de előtte szerezzünk be egy megfelelő JDBC meghajtóprogramot. (A példakörnyezetben a JSQLConnect meghajtóprogram szerepel, melynek egy próbaverziója letölthető erről a címről.)

A szükséges fájlok a 14 alkönyvtárban találhatók.

Izoláció: READ_COMMITTED

A "nem megismételhető olvasás" anomáliát mutatja be ez a példa. A példakörnyezet UNIX operációs rendszert és PostgreSQL adatbáziskezelőt tételez fel a localhost-on, valamint azt, hogy a "bank" adatbázisba beléphetünk a "felhasznalo" felhasználói névvel és a "jelszo" jelszóval. Fordítás és futtatás: runme.psql

A szükséges fájlok a 15 alkönyvtárban találhatók.

Észrevételeiket a javamegj@java.inf.elte.hu címen várjuk.
A lemezmellékletet Lőrentey Károly szerkesztette.