Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

18
Transakcje zarządzane kontenerem Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB Kompatybilność z wszystkimi typami EJB jak: jak: encji, sesyjne, sterowane komunikatami. encji, sesyjne, sterowane komunikatami. Brak oznaczeń początku i końca transakcji Brak oznaczeń początku i końca transakcji w kodzie EJB w kodzie EJB Prostota użycia. Prostota użycia. Kontener rozpoczyna transakcje tuz zaraz Kontener rozpoczyna transakcje tuz zaraz po uruchomieniu metody i zatwierdza ja po uruchomieniu metody i zatwierdza ja tuz przed jej zakończeniem. tuz przed jej zakończeniem. Pojedyncza metoda może być związana z co Pojedyncza metoda może być związana z co najwyżej jedna transakcja. (wiele bądź najwyżej jedna transakcja. (wiele bądź zagnieżdżone transakcje nie są dozwolone) zagnieżdżone transakcje nie są dozwolone) Nie każda metoda musi być związana z Nie każda metoda musi być związana z transakcja. Podczas składowania beana transakcja. Podczas składowania beana określa się które metody będą wiązane z określa się które metody będą wiązane z transakcjami transakcjami

description

Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak: encji, sesyjne, sterowane komunikatami. Brak oznaczeń początku i końca transakcji w kodzie EJB Prostota użycia. - PowerPoint PPT Presentation

Transcript of Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Page 1: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Transakcje zarządzane Transakcje zarządzane konteneremkontenerem

Kompatybilność z wszystkimi typami EJB jak:Kompatybilność z wszystkimi typami EJB jak:encji, sesyjne, sterowane komunikatami.encji, sesyjne, sterowane komunikatami.

Brak oznaczeń początku i końca transakcji w Brak oznaczeń początku i końca transakcji w kodzie EJBkodzie EJB

Prostota użycia.Prostota użycia. Kontener rozpoczyna transakcje tuz zaraz po Kontener rozpoczyna transakcje tuz zaraz po

uruchomieniu metody i zatwierdza ja tuz uruchomieniu metody i zatwierdza ja tuz przed jej zakończeniem.przed jej zakończeniem.

Pojedyncza metoda może być związana z co Pojedyncza metoda może być związana z co najwyżej jedna transakcja. (wiele bądź najwyżej jedna transakcja. (wiele bądź zagnieżdżone transakcje nie są dozwolone)zagnieżdżone transakcje nie są dozwolone)

Nie każda metoda musi być związana z Nie każda metoda musi być związana z transakcja. Podczas składowania beana transakcja. Podczas składowania beana określa się które metody będą wiązane z określa się które metody będą wiązane z transakcjamitransakcjami

Page 2: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Atrybuty transakcjiAtrybuty transakcji

Atrybuty transakcji kontrolują zasięg transakcjiAtrybuty transakcji kontrolują zasięg transakcji

Page 3: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Atrybuty transakcji mogą mieć wartość:Atrybuty transakcji mogą mieć wartość:

RequiredRequired RequiresNewRequiresNew MandatoryMandatory NotSupportedNotSupported SupportsSupports NeverNever

Atrybuty transakcji można zmieniać podczas Atrybuty transakcji można zmieniać podczas wielu faz rozwijania aplikacji (umieszczone w wielu faz rozwijania aplikacji (umieszczone w deployment descriptor)deployment descriptor)

Page 4: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Pierwszeństwo maja reguły ustalone dla konkretnej Pierwszeństwo maja reguły ustalone dla konkretnej metody beana przed regułami dotyczącymi ogólnie metody beana przed regułami dotyczącymi ogólnie całego beana.całego beana.

Reguły dla odpowiednich metod zależą od typu beanaReguły dla odpowiednich metod zależą od typu beana

Dla beanow sesyjnych można stosować transakcje do Dla beanow sesyjnych można stosować transakcje do business-role metod ale nie można do metod typu business-role metod ale nie można do metod typu createcreate

beany encji wymagają reguł dla metod typu: create, beany encji wymagają reguł dla metod typu: create, remove, business, i finderremove, business, i finder

Beany MDB wymagają reguł dla metody onMessageBeany MDB wymagają reguł dla metody onMessage

Page 5: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Wycofywanie transakcji zarzadzanych Wycofywanie transakcji zarzadzanych konteneremkontenerem

Wycofanie transakcji może być spowodowane Wycofanie transakcji może być spowodowane przez:przez:

Rzucenie wyjątku systemowegoRzucenie wyjątku systemowego Wywołanie metody setRollbackOnly() (rzucenie Wywołanie metody setRollbackOnly() (rzucenie

wyjątku metody nie spowoduje wycofania wyjątku metody nie spowoduje wycofania transakcji)transakcji)

Zmienne instancyjne w beanach encji Zmienne instancyjne w beanach encji przywracane są automatycznie poprzez przywracane są automatycznie poprzez wywołanie metody ejbLoadwywołanie metody ejbLoad

Zmienne sesyjne w beanach sesyjnych nie są Zmienne sesyjne w beanach sesyjnych nie są przywracane po wycofaniu transakcji i trzeba to przywracane po wycofaniu transakcji i trzeba to zrobić np poprzez interfejs synchronizacji sesji.zrobić np poprzez interfejs synchronizacji sesji.

Page 6: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

public void transferToSaving(double amount) throws public void transferToSaving(double amount) throws InsufficientBalanceException {InsufficientBalanceException {

checkingBalance -= amount;checkingBalance -= amount;savingBalance += amount;savingBalance += amount;try {try {

updateChecking(checkingBalance);updateChecking(checkingBalance);if (checkingBalance < 0.00) {if (checkingBalance < 0.00) {

context.setRollbackOnly();context.setRollbackOnly();throw new InsufficientBalanceException();throw new InsufficientBalanceException();

}}updateSaving(savingBalance);updateSaving(savingBalance);

} catch (SQLException ex) {} catch (SQLException ex) {throw new EJBException ("Transaction failed due to throw new EJBException ("Transaction failed due to

SQLException: " + ex.getMessage());SQLException: " + ex.getMessage());}}

} }

Page 7: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Synchronizacja zmiennych Synchronizacja zmiennych instancyjnychinstancyjnych

bean-ów sesyjnychbean-ów sesyjnych

Metoda afterBegin()Metoda afterBegin()

public void afterBegin() {public void afterBegin() {System.out.println("afterBegin()");System.out.println("afterBegin()");try {try {

checkingBalance = selectChecking();checkingBalance = selectChecking();savingBalance = selectSaving();savingBalance = selectSaving();

} catch (SQLException ex) {} catch (SQLException ex) {throw new EJBException("afterBegin throw new EJBException("afterBegin

Exception: " + Exception: " + ex.getMessage());ex.getMessage());} }

} }

Page 8: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Metoda beforeCompletion()Metoda beforeCompletion() (ostatnia szansa na wycofanie transakcji)(ostatnia szansa na wycofanie transakcji)

Metoda afterCompletion()Metoda afterCompletion()

public void afterCompletion(boolean committed) public void afterCompletion(boolean committed) { System.out.println("afterCompletion: " + { System.out.println("afterCompletion: " + committed);committed);if (committed == false) {if (committed == false) {

try {try {checkingBalance = selectChecking(); checkingBalance = selectChecking(); savingBalance = selectSaving();savingBalance = selectSaving();

} catch (SQLException ex) {} catch (SQLException ex) {throw new throw new

EJBException("afterCompletion EJBException("afterCompletion SQLException:       " + ex.getMessage());SQLException:       " + ex.getMessage());

}}}}

} }

Page 9: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Metody niedozwolone w transakcjach Metody niedozwolone w transakcjach sterowanych konteneremsterowanych kontenerem

Metody commit, setAutoCommit, i rollbackMetody commit, setAutoCommit, i rollback

z java.sql.Connectionz java.sql.Connection

Metoda getUserTransaction z Metoda getUserTransaction z javax.ejb.EJBContextjavax.ejb.EJBContext

Jakakolwiek metoda z Jakakolwiek metoda z javax.transaction.UserTransactionjavax.transaction.UserTransaction

Page 10: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Transakcje zarzadzane beanamiTransakcje zarzadzane beanami

Ten rodzaj transakcji mogą mieć beany encji i Ten rodzaj transakcji mogą mieć beany encji i sesyjnesesyjne

Jawnie wewnątrz beana podaje się początek i Jawnie wewnątrz beana podaje się początek i koniec transakcjikoniec transakcji

Nie są już ograniczone na zagnieżdżone Nie są już ograniczone na zagnieżdżone transakcje jak w przypadku transakcji transakcje jak w przypadku transakcji zarządzanych konteneremzarządzanych kontenerem

Transakcje zarządzane przez beany musza być Transakcje zarządzane przez beany musza być obsługiwane albo przez JDBC albo JTAobsługiwane albo przez JDBC albo JTA

Page 11: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Transakcje JDBCTransakcje JDBC

Kontrolerem jest menadżer transakcji DBMSKontrolerem jest menadżer transakcji DBMS Metody commit i rollback z java.sql.ConnectionMetody commit i rollback z java.sql.Connection

Transakcje JTA (Java Transaction API)Transakcje JTA (Java Transaction API)

Są zarządzane przez menadżera transakcji J2EESą zarządzane przez menadżera transakcji J2EE Pozwala on np na obsługę wielu baz danych od Pozwala on np na obsługę wielu baz danych od

różnychróżnychdostawców. (praca z heterogeniczna baza)dostawców. (praca z heterogeniczna baza)

Minus J2EE nie wspomaga zagnieżdżonych Minus J2EE nie wspomaga zagnieżdżonych transakcjitransakcji

Metody begin, commit, i rollback z Metody begin, commit, i rollback z javax.transaction.UserTransactionjavax.transaction.UserTransaction

Page 12: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

public void ship (String productId, String orderId, int public void ship (String productId, String orderId, int quantity) {quantity) {try {try {

makeConnection();makeConnection();con.setAutoCommit(false);con.setAutoCommit(false);updateOrderItem(productId, orderId);updateOrderItem(productId, orderId);updateInventory(productId, quantity);updateInventory(productId, quantity);con.commit();con.commit();

} catch (Exception ex) {} catch (Exception ex) {try {try {

con.rollback();con.rollback();throw new EJBException("Transaction failed: throw new EJBException("Transaction failed:

" + " + ex.getMessage());ex.getMessage());} catch (SQLException sqx) {} catch (SQLException sqx) {

throw new EJBException("Rollback failed: " throw new EJBException("Rollback failed: " + + sqx.getMessage());sqx.getMessage());

}}} finally { releaseConnection(); }} finally { releaseConnection(); }

}}

Page 13: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

public void withdrawCash(double amount) {public void withdrawCash(double amount) {UserTransaction ut = context.getUserTransaction();UserTransaction ut = context.getUserTransaction();try {try {

ut.begin();ut.begin();updateChecking(amount);updateChecking(amount);machineBalance -= amount;machineBalance -= amount;insertMachine(machineBalance);insertMachine(machineBalance);ut.commit();ut.commit();

} catch (Exception ex) {} catch (Exception ex) {try {try {

ut.rollback();ut.rollback();} catch (SystemException syex) {} catch (SystemException syex) {

throw new EJBException ("Rollback throw new EJBException ("Rollback failed: " + failed: " + syex.getMessage());syex.getMessage());

}}throw new EJBException ("Transaction throw new EJBException ("Transaction

failed: " + failed: " + ex.getMessage());ex.getMessage());}}

} }

Page 14: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Metody zabronioneMetody zabronione

Metoda getRollbackOnly()Metoda getRollbackOnly()

Metoda setRollbackOnly()Metoda setRollbackOnly()

z EJBContext interfacez EJBContext interface

(metody te powinny być używane tylko w (metody te powinny być używane tylko w transakcjachtransakcjach

zarządzanych kontenerem)zarządzanych kontenerem)

Page 15: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Podsumowanie transakcji dla EJBPodsumowanie transakcji dla EJB

Standardowym ustawieniem transakcji jest Standardowym ustawieniem transakcji jest sterowanie kontenerem zsterowanie kontenerem z

opcja required.opcja required.

Page 16: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Transaction TimeoutsTransaction Timeouts

W pliku domain.xml można ustawić W pliku domain.xml można ustawić timeout po którym rozpoczęta transakcja timeout po którym rozpoczęta transakcja zostanie anulowana. Odpowiada za to zostanie anulowana. Odpowiada za to kontroler EJB Ustawienie tego parametru kontroler EJB Ustawienie tego parametru na wartość 0 wyłącza timeout.na wartość 0 wyłącza timeout.

Funkcje ta można ustawić tylko w Funkcje ta można ustawić tylko w transakcjach sterowanych kontenerem.transakcjach sterowanych kontenerem.

Page 17: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Poziomy izolacji Poziomy izolacji

(widocznosci modyfikowanych danych(widocznosci modyfikowanych danych))

Poziom izolacji beanow encji sterowanych Poziom izolacji beanow encji sterowanych kontenerem modyfikowany jest w pliku sun-cmp-kontenerem modyfikowany jest w pliku sun-cmp-mapping.xml i standardowo ustawiony jest na mapping.xml i standardowo ustawiony jest na READ_COMMITED dla wszystkich rodzajów READ_COMMITED dla wszystkich rodzajów beanow, ale przy transakcjach sterowanych beanow, ale przy transakcjach sterowanych beanem do ustawiania poziomu izolacji służy beanem do ustawiania poziomu izolacji służy metoda: metoda:

con.setTransactionIsolation(TRANSACTION_READ_UNCOcon.setTransactionIsolation(TRANSACTION_READ_UNCOMMITTED)MMITTED)

Page 18: Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak:

Uaktualnianie wielu baz danychUaktualnianie wielu baz danych

J2EE gdy kontener zarządza transakcjami oraz J2EE gdy kontener zarządza transakcjami oraz przy użyciu JTA (zarządzaniu beanami)przy użyciu JTA (zarządzaniu beanami)

2 rodzaje rozwiązań2 rodzaje rozwiązań