Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated,...

28
1 1. Model ACID. 2. Deklaratywne zarz dzanie transakcjami, ą atrybuty transakcji. 3. Propagacja transakcji. transakcje rozproszone, propagacja kontekstu utrwalania. 3. Izolacja typowe problemy, blokady, poziomy izolacji, współbie no ć optymistyczna. ż ś Transakcje

Transcript of Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated,...

Page 1: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

1

1. Model ACID.

2. Deklaratywne zarz dzanie transakcjami,ą● atrybuty transakcji.

3. Propagacja transakcji.

● transakcje rozproszone,

● propagacja kontekstu utrwalania.

3. Izolacja

● typowe problemy,

● blokady,

● poziomy izolacji,

● współbie no ć optymistyczna.ż ś

Transakcje

Page 2: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

2

Typowe transakcje s ACID (ą atomic, consistent, isolated, durable):

● atomowe – zbiór operacji wykonanych w cało ci lub wcale,ś● spójne – logika biznesowa zapewnia integralno ć składowanych ś

danych, zmienianych podczas wykonywania transakcji.

● izolowane – brak ingerencji ze strony innych procesów na wykonanie

i przebieg transakcji,

● trwałe – dane nie mog zostać utracone w przypadku awarii ą

systemu.

Transakcje ACID

Page 3: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

3

public TicketDO bookPassage(CreditCardDO card, double price)throws IncompleteConversationalState {

if (customer == null || cruise == null || cabin == null) { throw new IncompleteConversationalState( ); } try { Reservation reservation = new Reservation( customer, cruise, cabin, price); entityManager.persist(reservation); this.processPayment.byCredit(customer, card, price); TicketDO ticket = new TicketDO(customer,cruise,cabin,price); return ticket; } catch(Exception e) { throw new EJBException(e); }}

Transakcje ACID

Page 4: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

4

Specyfikacja EJB umo liwia deklaratywne zarz dzanie transakcjami.ż ą

Zarz dzanie (niejawne) transakcjami poprzez kontener EJB odbywa si ą ę

na podstawie atrybutów transakcji. S one kontrolowane poprzez ą

adnotacje @TransactionAttribute lub deskryptor wdro enia. Dzi ki ż ę

temu zachowanie transakcji jest niezale ne od logiki biznesowej. ż

Deklaratywne zarz dzanie transakcjami redukuje zło ono ć transakcji ą ż ś

oraz upraszcza tworzenie rozbudowanych aplikacji biznesowych.

Deklaratywne zarz dzanie ątransakcjami

Page 5: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

5

Atrybuty transakcji mog być zdefiniowane dla całego komponentu ą

EJB lub dla poszczególnych jego metod. Drugi sposób, choć

trudniejszy, zapewnia wi ksz elastyczno ć. Specyfikacja okre la ę ą ś ś

nast puj ce warto ci dla atrybutów transakcji:ę ą ś● NotSupported,

● Supports,

● Required (domy lnie),ś● RequiresNew,

● Mandatory,

● Never.

Atrybuty transakcji

Page 6: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

6

import javax.ejb.Stateless;import javax.ejb.TransactionAttribute;@Stateless

@TransactionAttribute(NOT_SUPPORTED)public class TravelAgentBean implements TravelAgentRemote { public void setCustomer(Customer cust) { ... }

@TransactionAtribute(REQUIRED) public TicketDO bookPassage(CreditCardDO card, double price) { ... } ...}

Atrybuty transakcji

Page 7: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

7

<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version=3.0> <assembly-descriptor> <container-transaction> <method> <ejb-name>TravelAgentEJB</ejb-name> <method-name> * </method-name> </method> <trans-attribute>NotSupported</trans-attribute> </container-transaction> <container-transaction> <method> <ejb-name>TravelAgentEJB</ejb-name> <method-name>bookPassage</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor></ejb-jar>

Atrybuty transakcji

Page 8: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

8

Wywołanie metody zawiesza transakcj do czasu powrotu. Zakres ę

transakcji nie jest propagowany do komponentu EJB

Atrybut NotSupported

klient EJB EJB

kontekst transakcyjny klientakontekst nietransakcyjny

Page 9: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

9

Atrybut Supports powoduje, e zakres transakcji (lub jego brak) jest ż

propagowany do komponentu EJB.

Atrybut Supports

klient EJB EJB

kontekst transakcyjny klientakontekst nietransakcyjny

klient EJB EJB

Page 10: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

10

Wywołana metoda zostaje doł czona do kontekstu transakcyjnego ą

klienta. W przypadku jego braku, metoda rozpoczyna własn ą

transakcj w ramach której zostanie wykonana.ę

Atrybut Required

klient EJB EJB

kontekst transakcyjny klientakontekst transakcyjny EJB

klient EJB EJB

kontekst nietransakcyjny

Page 11: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

11

Niezale nie od kontekstu klienta, tworzona jest nowa transakcja ż

w ramach której zostanie wykonana wywoływana metoda.

Atrybut RequiresNew

klient EJB

kontekst transakcyjny klientakontekst transakcyjny EJB

klient EJB EJB

kontekst nietransakcyjny

EJB

Page 12: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

12

Metoda musi być wykonana w ramach transakcji klienta. Je li ś

wywołanie metody nie nast piło z wn trza transakcji, zostaje ą ę

zwrócony wyj tek.ą

Atrybut Mandatory

klient EJB

kontekst transakcyjny klientakontekst nietransakcyjny

klient EJB EJB

wyj tek ą EJBTransactionRequiredException

EJB

Page 13: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

13

Metoda nie mo e być wywołana wewn trz zakresu transakcji.ż ą

Atrybut Never

klient EJB

kontekst transakcyjny klientakontekst nietransakcyjny

klient EJB EJB

wyj tek ą EJBException lub RemoteException

EJB

Page 14: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

14

Odwołanie do mened erów encji wymaga istnienia zakresu transakcji. ż

Z tego powodu zaleca si u ywania w tych sytuacjach jednego ę ż

z atrybutów: Required, RequiresNew, Mandatory.

Metody komponentów sterowanych komunikatami mog deklarować ą

jedynie atrybuty Required i NotSupported. Pozostałe atrybuty

odnosz si do transakcji zainicjowanych przez klienta, wiec nie maj ą ę ą

sensu w kontek cie MDB poniewa te komponenty nie s w aden ś ż ą ż

bezpo redni sposób powi zane z klientem.ś ą

Atrybut Mandatory nie mo e być u ywany z metodami stanowi cymi ż ż ą

punkty ko cowe (usługa ń WebServices).

Atrybuty – zalecania i ograniczenia

Page 15: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

15

Komponenty bior ce udział w transakcji rejestruj si w menad erze ą ą ę ż

transakcji. Po wykonaniu wszystkich zada przez komponenty, ń

menad er decyduje, czy transakcja zostanie potwierdzona (ż commit),

czy anulowana (rollback). Serwer EJB potrafi współpracować z innymi

systemami transakcyjnymi w celu realizacji tzw. transakcji

rozproszonych. Transakcje rozproszone wymagaj tzw. dwufazowego ą

zatwierdzania. Najpopularniejszym stosowanym tutaj mechanizmem

jest algorytm 2PC.

Propagacja transakcji

Page 16: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

16

Protokół 2PC (ang. two-phase commit protocol) rozpoczyna działanie

w momencie rozpocz cia zatwierdzania transakcji rozproszonej ę

i składa si z dwóch etapów. W pierwszym – przygotowanie (ę ang.

prepare), ka dy z uczestników ż transakcji przygotowuje si do jej ę

lokalnego zatwierdzenia. Gdy wszyscy wyrazili gotowo ć ś

zatwierdzenia rozpoczyna si druga faza – zatwierdzenie ę (ang.

commit). Je li jakakolwiek z lokalnych transakcji nie mogła być ś

zatwierdzona, wszystkie s odwoływane. ą

Cały proces dwufazowego zatwierdzania jest koordynowany przez

menad era transakcji.ż

Protokół 2PC

Page 17: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

17

Gdy menad er encji o zakresie ograniczonym przez transakcj :ż ę● jest wywoływany poza zakresem transakcji, kontekst utrwalania jest

tworzony na czas wywołania metody,

● jest wywoływany wewn trz transakcji, tworzony jest nowy kontekst ą

pod warunkiem, ze nie istnieje ju kontekst powi zany z t transakcj . ż ą ą ą

W takiej sytuacji zostanie u yty istniej cy kontekst,ż ą● wywołuje stanowy komponent sesyjny z rozszerzonym kontekstem

utrwalania, zgłaszany jest bł d.ą

Propagacja kontekstu utrwalania

Page 18: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

18

public List listAvailableCabins(int bedCount) throws IncompleteConversationalState { if (cruise == null) throw new IncompleteConversationalState( ); Query query = entityManager.createQuery("SELECT name " + "FROM Cabin c WHERE c.ship = :ship AND c.bedCount = :beds " + "AND NOT ANY (SELECT cabin from Reservation res " + "WHERE res.cruise = :cruise"); query.setParameter("ship", cruise.getShip( )); query.setParameter("beds", bedCount); query.setParameter("cruise", cruise); return query.getResultList( );}

Izolacja – brudne odczyty

Page 19: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

19

...travelAgent.setCabinID(99);

// początek transakcjiagent.bookPassage(card, price){

em.persist(reservation);

pp.byCredit(customer, card, price);}// rollback// koniec transakcji...

Izolacja – brudne odczyty

...// początek transakcjiobj.listAvailableCabins(2);// commit// koniec transakcji:...

2

1

3

4

5

Brudne odczyty (dirty reads) wyst puj gdy jedna transakcja ę ą

odczytuje dane zmieniane przez drug transakcj przed jej ą ę

zatwierdzeniem.

Page 20: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

20

...// początek transakcji

agent.listAvailableCabins(2);

agent.listAvailableCabins(2);

// koniec transakcji// commit...

Izolacja – powtarzalne odczyty

...cabin c = em.find(Cabin.class, 99);// początek transakcjic.setBedCount(3);// koniec transakcji:// commit...

21

34

Powtarzalne odczyty (repeatable reads) pojawiaj si je li damy ą ę ś żą

gwarancji, aby wielokrotne odczyty tych samych danych w ramach

transakcji dawały takie same wyniki.

Page 21: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

21

...// początek transakcji

agent.listAvailableCabins(2);

agent.listAvailableCabins(2);

// koniec transakcji// commit...

Izolacja – odczyty fantomowe

...agent.setCabin(99);// początek transakcji

agent.bookPassage(card, price){ em.persist(reservation);}// koniec transakcji:// commit...

21

34

Odczyty fantomowe (phantom reads) wyst puj gdy nowy rekord ę ą

dodany do bazy jest rejestrowany przez transakcj , która rozpocz ła ę ę

si przed jego dodaniem.ę

Page 22: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

22

Blokady

Aby umo liwić realizacj izolowanych transakcji bazy danych ż ę

wykorzystuj blokady. Podstawowe typy blokad:ą● odczytu – blokuje mo liwo ć zmiany danych odczytanych przez ż ś

transakcj do czasu jej zako czenia. Transakcja nie modyfikuje ę ń

danych (chroni przed powtarzalnymi odczytami),

● zapisu – blokuje mo liwo ć zmiany danych do czasu zako czenia ż ś ń

transakcji, ale umo liwia ich odczyt (brudne odczyty),ż● wył czna do zapisu – blokuje innym transakcjom mo liwo ć zapisu i ą ż ś

odczytu danych do czasu zako czenia transakcji,ń● obrazy (snapshots) – innym transakcjom udost pniana jest kopia ę

danych z momentu przed rozpocz ciem transakcji.ę

Page 23: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

23

Poziomy izolacji

Poziom izolacji okre la odporno ć transakcji na oddziaływanie z ś ś

innymi, wykonywanymi równolegle operacjami na bazie danych.

Dost pne poziomy izolacji w technologii JEE s okre lone w ę ą ś

specyfikacji JDBC:

● read uncommited – inne transakcje mog odczytywać ą

niezatwierdzone dane,

● read commited - inne transakcje nie mog odczytywać ą

niezatwierdzonych danych,

● repeatable read - inne transakcje nie mog ani odczytywać ani ą

zmieniać niezatwierdzonych danych poniewa rekordy s blokowane ż ą

podczas operacji odczytu.

● serializable – transakcja ma wył czny dost p do danych, na których ą ę

operuje poniewa nast puje blokada tabel.ż ę

Page 24: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

24

Poziomy izolacji

Poziomy izolacji dla zasobów s ustawiane i zarz dzane z poziomu ą ą

kontenera EJB. Dokumentacja kontenera zawiera informacje czy i jak

mo na je modyfikować. Transakcje zarz dzane przez komponenty ż ą

sesyjne lub sterowane komunikatami mog tak e być zarz dzane ą ż ą

poprzez API JDBC:

InitialContext jndi = new InitialContext( ); DataSource source = (javax.sql.DataSource) jndi.lookup( "java:comp/env/jdbc/titanDB"); Connection con = source.getConnection( ); con.setTransactionIsolation( Connection.TRANSACTION_SERIALIZABLE);Nale y pami tać, e stosowanie restrykcyjnych poziomów izolacji ż ę ż

zwykle wpływa niekorzystnie na wydajno ć aplikacji.ś

Page 25: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

25

Współbie no ć ż śoptymistyczna

Zało enie:ż transakcje dotycz du ej liczby obiektów ale stosunkowo ą ż

rzadko transakcje odwołuj si do tych samych obiektów.ą ę

Rozwi zanie:ą schemat zarz dzania wersjami.ą

@Entitypublic class CruiseCabin { private int id; private Cabin cabin; private Cruise cruise; private boolean isReserved; private long version; ... @Version protected long getVersion( ) { return version; } ...}

Page 26: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

26

Współbie no ć ż śoptymistyczna

public TicketDO bookPassage(CreditCardDO card, double price) throws IncompleteConversationalState { if (customer == null || cruise == null || cabin == null) { throw new IncompleteConversationalState( ); } try { Query query = entityManager.createQuery( "SELECT cc FROM CruiseCabin cc WHERE" + "cc.cabin = :cabin AND cc.cruise = :cruise"); query.setParameter("cabin", cabin); query.setParameter("cruise", cruise); CruiseCabin cc = (CruiseCabin)query.getSingleResult(); if (cc.getIsReserved( )) throw new EJBException("Kabina zarezerwowana"); cc.setIsReserved(true); ... } catch(Exception e) { throw new EJBException(e); }}

UPDATE CRUISE_CABIN SET isReserved=true, version=version + 1 WHERE id = 132 AND version = 101;

Page 27: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

27

Zabezpieczenia programowe

Interfejs EntityManager posiada metod ę lock() słu c do żą ą

blokowania danych:

package javax.persistence;public enum LockModeType{ READ, WRITE}

public interface EntityManager { void lock(Object entity, LockModeType type);}

READ eliminuje odczyty brudne i powtarzalne. WRITE dodatkowo

zwi ksza atrybut ę @Version.

Page 28: Transakcje - Jagiellonian Universityth-2 Typowe transakcje są ACID (atomic, consistent, isolated, durable): atomowe – zbiór operacji wykonanych w całości lub wcale, spójne –

28

Podsumowanie

Transakcje s niezb dne aby zapewnić efektywnie i współbie ne ą ę ż

operacje na zgromadzonych danych. Zarz dzanie transakcjami ą

odbywa sie automatycznie (kontener EJB) na podstawie deklaracji.

Jawne zarz dzanie jest mo liwe (JTA) ale niezalecane.ą ż

Spójno ć przetwarzanych danych mo e być zapewniona poprzez ś ż

wła ciwy dobór poziomów izolacji oraz blokad.ś