Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak: Kompatybilność z wszystkimi typami EJB jak: encji, sesyjne, sterowane komunikatami.

Podobne prezentacje


Prezentacja na temat: "Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak: Kompatybilność z wszystkimi typami EJB jak: encji, sesyjne, sterowane komunikatami."— Zapis prezentacji:

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

2 Atrybuty transakcji Atrybuty transakcji kontrolują zasięg transakcji

3 Atrybuty transakcji mogą mieć wartość: Required Required RequiresNew RequiresNew Mandatory Mandatory NotSupported NotSupported Supports Supports Never Never Atrybuty transakcji można zmieniać podczas wielu faz rozwijania aplikacji (umieszczone w deployment descriptor)

4 Pierwszeństwo maja reguły ustalone dla konkretnej metody beana przed regułami dotyczącymi ogólnie całego beana. Pierwszeństwo maja reguły ustalone dla konkretnej metody beana przed regułami dotyczącymi ogólnie całego beana. Reguły dla odpowiednich metod zależą od typu beana Reguły dla odpowiednich metod zależą od typu beana Dla beanow sesyjnych można stosować transakcje do business- role metod ale nie można do metod typu create Dla beanow sesyjnych można stosować transakcje do business- role metod ale nie można do metod typu create beany encji wymagają reguł dla metod typu: create, remove, business, i finder beany encji wymagają reguł dla metod typu: create, remove, business, i finder Beany MDB wymagają reguł dla metody onMessage Beany MDB wymagają reguł dla metody onMessage

5 Wycofywanie transakcji zarzadzanych kontenerem Wycofanie transakcji może być spowodowane przez: Rzucenie wyjątku systemowego Rzucenie wyjątku systemowego Wywołanie metody setRollbackOnly() (rzucenie wyjątku metody nie spowoduje wycofania transakcji) Wywołanie metody setRollbackOnly() (rzucenie wyjątku metody nie spowoduje wycofania transakcji) Zmienne instancyjne w beanach encji przywracane są automatycznie poprzez wywołanie metody ejbLoad Zmienne instancyjne w beanach encji przywracane są automatycznie poprzez wywołanie metody ejbLoad Zmienne sesyjne w beanach sesyjnych nie są Zmienne sesyjne w beanach sesyjnych nie są przywracane po wycofaniu transakcji i trzeba to zrobić np poprzez interfejs synchronizacji sesji.

6 public void transferToSaving(double amount) throws InsufficientBalanceException { checkingBalance -= amount; savingBalance += amount; try { updateChecking(checkingBalance); if (checkingBalance < 0.00) { context.setRollbackOnly(); throw new InsufficientBalanceException(); }updateSaving(savingBalance); } catch (SQLException ex) { throw new EJBException ("Transaction failed due to SQLException: " + ex.getMessage()); }}

7 Synchronizacja zmiennych instancyjnych bean-ów sesyjnych bean-ów sesyjnych Metoda afterBegin() Metoda afterBegin() public void afterBegin() { System.out.println("afterBegin()"); try { checkingBalance = selectChecking(); savingBalance = selectSaving(); } catch (SQLException ex) { throw new EJBException("afterBegin Exception: " + ex.getMessage()); }}

8 Metoda beforeCompletion() Metoda beforeCompletion() (ostatnia szansa na wycofanie transakcji) (ostatnia szansa na wycofanie transakcji) Metoda afterCompletion() Metoda afterCompletion() public void afterCompletion(boolean committed) { System.out.println("afterCompletion: " + committed); if (committed == false) { try { checkingBalance = selectChecking(); savingBalance = selectSaving(); } catch (SQLException ex) { throw new EJBException("afterCompletion SQLException: " + ex.getMessage()); }}}

9 Metody niedozwolone w transakcjach sterowanych kontenerem Metody commit, setAutoCommit, i rollback Metody commit, setAutoCommit, i rollback z java.sql.Connection Metoda getUserTransaction z javax.ejb.EJBContext Metoda getUserTransaction z javax.ejb.EJBContext Jakakolwiek metoda z javax.transaction.UserTransaction Jakakolwiek metoda z javax.transaction.UserTransaction

10 Transakcje zarzadzane beanami Ten rodzaj transakcji mogą mieć beany encji i sesyjne Ten rodzaj transakcji mogą mieć beany encji i sesyjne Jawnie wewnątrz beana podaje się początek i koniec transakcji Jawnie wewnątrz beana podaje się początek i koniec transakcji Nie są już ograniczone na zagnieżdżone transakcje jak w przypadku transakcji zarządzanych kontenerem Nie są już ograniczone na zagnieżdżone transakcje jak w przypadku transakcji zarządzanych kontenerem Transakcje zarządzane przez beany musza być obsługiwane albo przez JDBC albo JTA Transakcje zarządzane przez beany musza być obsługiwane albo przez JDBC albo JTA

11 Transakcje JDBC Kontrolerem jest menadżer transakcji DBMS Kontrolerem jest menadżer transakcji DBMS Metody commit i rollback z java.sql.Connection Metody commit i rollback z java.sql.Connection Transakcje JTA (Java Transaction API) Są zarządzane przez menadżera transakcji J2EE Są zarządzane przez menadżera transakcji J2EE Pozwala on np na obsługę wielu baz danych od różnych Pozwala on np na obsługę wielu baz danych od różnych dostawców. (praca z heterogeniczna baza) Minus J2EE nie wspomaga zagnieżdżonych transakcji Minus J2EE nie wspomaga zagnieżdżonych transakcji Metody begin, commit, i rollback z javax.transaction.UserTransaction Metody begin, commit, i rollback z javax.transaction.UserTransaction

12 public void ship (String productId, String orderId, int quantity) { try { makeConnection();con.setAutoCommit(false); updateOrderItem(productId, orderId); updateInventory(productId, quantity); con.commit(); } catch (Exception ex) { try { con.rollback(); throw new EJBException("Transaction failed: " + ex.getMessage()); } catch (SQLException sqx) { throw new EJBException("Rollback failed: " + sqx.getMessage()); } } finally { releaseConnection(); } }

13 public void withdrawCash(double amount) { UserTransaction ut = context.getUserTransaction(); try { ut.begin();updateChecking(amount); machineBalance -= amount; insertMachine(machineBalance);ut.commit(); } catch (Exception ex) { try { ut.rollback(); } catch (SystemException syex) { throw new EJBException ("Rollback failed: " + syex.getMessage()); } throw new EJBException ("Transaction failed: " + ex.getMessage()); }}

14 Metody zabronione Metoda getRollbackOnly() Metoda setRollbackOnly() z EJBContext interface (metody te powinny być używane tylko w transakcjach zarządzanych kontenerem)

15 Podsumowanie transakcji dla EJB Standardowym ustawieniem transakcji jest sterowanie kontenerem z opcja required.

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

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

18 Uaktualnianie wielu baz danych J2EE gdy kontener zarządza transakcjami oraz przy użyciu JTA (zarządzaniu beanami) J2EE gdy kontener zarządza transakcjami oraz przy użyciu JTA (zarządzaniu beanami) 2 rodzaje rozwiązań 2 rodzaje rozwiązań


Pobierz ppt "Transakcje zarządzane kontenerem Kompatybilność z wszystkimi typami EJB jak: Kompatybilność z wszystkimi typami EJB jak: encji, sesyjne, sterowane komunikatami."

Podobne prezentacje


Reklamy Google