1 / 18

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

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.

thora
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 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) { 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. • 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: 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ń

More Related