Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Transakcje zarządzane kontenerem

Podobne prezentacje


Prezentacja na temat: "Transakcje zarządzane kontenerem"— Zapis prezentacji:

1 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. 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) 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 RequiresNew Mandatory NotSupported Supports 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. 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 beany encji wymagają reguł dla metod typu: create, remove, business, i finder Beany MDB wymagają reguł dla metody onMessage

5 Wycofywanie transakcji zarzadzanych kontenerem
Wycofanie transakcji może być spowodowane przez: Rzucenie wyjątku systemowego 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 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 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()
(ostatnia szansa na wycofanie transakcji) 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 z java.sql.Connection Metoda getUserTransaction z javax.ejb.EJBContext Jakakolwiek metoda z javax.transaction.UserTransaction

10 Transakcje zarzadzane beanami
Ten rodzaj transakcji mogą mieć beany encji i sesyjne 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 Transakcje zarządzane przez beany musza być obsługiwane albo przez JDBC albo JTA

11 Transakcje JTA (Java Transaction API)
Transakcje JDBC Kontrolerem jest menadżer transakcji DBMS Metody commit i rollback z java.sql.Connection Transakcje JTA (Java Transaction API) Są zarządzane przez menadżera transakcji J2EE 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 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) { 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) { 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. Funkcje ta można ustawić tylko w transakcjach sterowanych kontenerem.

17 (widocznosci modyfikowanych danych)
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: con.setTransactionIsolation(TRANSACTION_READ_UNCOMMITTED)

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


Pobierz ppt "Transakcje zarządzane kontenerem"

Podobne prezentacje


Reklamy Google