2010-06-20 13 views
14

Tytuł mówi wszystko: Jaka jest różnica między UserTransaction a EntityTransaction?Różnica między UserTransaction i EntityTransaction

Moja szczątkowe zrozumienia jest to, że UserTransaction stosuje się, gdy wymagana jest JTA (np turystyczne zapytań na mulitple rzeczy) i że EntityTransaction stosuje się, gdy wymagana jest tylko JPA (na przykład, gdy zapytanie jest atomowy).

Czy to jedyna różnica między tymi dwoma, czy jest coś więcej niż to?

+0

możliwe duplikat [Jaka jest różnica między @Resource UserTransaction i EntityManager.getTransaction()] (http://stackoverflow.com/questions/2517062/what-is-difference-between-resource-userransaction-and-entitymanager-gettransac) – ewernli

+1

@ewernli: To trochę niesprawiedliwe, że bym na Wiesz, że to pytanie było duplikatem, gdy już znałem odpowiedź na to pytanie! Ani pytanie, ani odpowiedź nie zawierają żadnej wzmianki o 'EntityTransaction' - szukałem przed pytaniem. – bguiz

+7

Całkowicie to rozumiem. Dlatego też poświęciłem czas, aby odpowiedzieć na twoje pytanie najlepiej jak potrafiłem. Jest to zwyczajna praktyka na SO, która wskazuje na możliwy duplikat, aby ludzie mogli czytać odpowiedzi na oba pytania, poprawia to jakość SO. To nie jest krytyka ani nic.Pytanie jest "zamknięte jako dokładny duplikat" tylko wtedy, gdy istnieje 5 głosów, które oznaczyły go jako taki. – ewernli

Odpowiedz

20

Moja szczątkowe zrozumienia jest to, że UserTransaction jest używany, gdy JTA jest wymagane (np robić zapytania dotyczące mulitple rzeczy), a EntityTransaction jest używany, gdy JPA wymagany jest tylko (np gdy zapytanie jest atomowy).

To w zasadzie słuszne, ale twój opis "wielu rzeczy" i "atomowej" jest nieco dziwny. JTA pozwala programistom wykorzystywać transakcję rozproszoną do wykonywania zmian w zasobach wielokrotnych (baza danych, broker JMS itp.) Atomowo (wszystko lub nic). Jeśli dostęp do tylko jednego zasobu (np. Jednej bazy danych), nie potrzebujesz JTA, ale transakcja jest nadal atomowa (wszystko lub nic). Jest tak na przykład w przypadku, gdy używasz zwykłej transakcji JDBC w jednej bazie danych.

Zważywszy UserTransaction Vs. EntityTransaction:

  • Jeśli JPA jest stosowanie stand-alone, należy użyć EntityTransaction wyznaczenie transakcję siebie.
  • Jeśli JPA jest używany w zarządzanym środowisku, w którym jest zintegrowany z JTA, używa się UserTransaction. EntityManager łączy się z menedżerem transakcji rozproszonych JTA. Jedyną subtelnością, o której wiem, jest kolor zmian. Po użyciu EntityTransaction, JPA wie, że musi opróżnić zmiany. Jeśli transakcja jest kontrolowana za pomocą UserTransaction, musi zarejestrować wywołanie zwrotne za pomocą JTA registerSynchronization, aby zmiany zostały usunięte do bazy danych przed zakończeniem transakcji. Jeśli używasz EJB z CMT (transakcja zarządzana przez kontener), nie musisz nawet używać UserTransaction: serwer aplikacji uruchamia i zatrzymuje transakcje za Ciebie.

Powiązane pytania:

Powiązane problemy