Mam pytania jak poniżej:
- Jaka jest różnica między tymi dwoma?
- Czy oba są obsługiwane przez wszystkie bazy danych?
- Czy JPA TransactionManager i JTA TransactionManager różnią się od siebie?
Implementacje JPA mają do wyboru samodzielne zarządzanie transakcjami ( RESOURCE_LOCAL
) lub zarządzanie nimi przez implementację JTA serwera aplikacji.
W większości przypadków RESOURCE_LOCAL jest w porządku. Spowoduje to użycie podstawowych transakcji na poziomie JDBC. Wadą jest to, że transakcja jest lokalna dla jednostki trwałości JPA, więc jeśli chcesz, aby transakcja obejmowała wiele jednostek trwałości (lub innych baz danych), wówczas RESOURCE_LOCAL może nie być wystarczająco dobry.
JTA jest również używany do zarządzania transakcjami w różnych systemach, takich jak JMS i JCA, ale jest to dość egzotyczne użycie dla większości z nas.
Aby używać JTA, potrzebujesz obsługi go na swoim serwerze aplikacji, a także obsługi ze sterownika JDBC.
Jako dodatek do innych odpowiedzi
Oto fragment niezwykle przydatnego artykułu (opublikowanego na stronie Apache TomEE ), który może również pomóc odpowiedzieć na pierwsze pytanie OP (link do artykułu znajduje się poniżej).
Każdy zainteresowany nauką Java Persistence API - zrób sobie przysługę i przeczytaj cały artykuł tutaj: JPA Concepts: JPA 101 .
źródło
transaction-type=RESOURCE_LOCAL
i@PersistenceContext
i@Transactional
zarządzany przez wiosnęResource_Local i JTA to menedżerowie transakcji (metody dokonywania transakcji). Nie jest to własność bazy danych, ale komponent odpowiedzialny za koordynację transakcji. Menedżerowie transakcji JPA i JTA są różni. Menedżer transakcji JPA jest odpowiedzialny za transakcje JPA i chcesz go użyć, jeśli wykonujesz tylko transakcję JPA. Menedżer transakcji JTA jest menedżerem transakcji ogólnego przeznaczenia i może pozyskiwać inne zasoby, takie jak kolejki JMS w transakcji. Zazwyczaj kontenery Java EE wykorzystują menedżera transakcji JTA dla EJB, jednostek JPA itp.
źródło
resource_local vs JTA to transakcja lokalna vs transakcja globalna. Chodzi o to, czy możemy zarządzać wieloma zasobami w ramach jednej transakcji.
CMT vs BMT chodzi o to, kto otwiera i zamyka transakcję - twórca aplikacji czy serwer aplikacji.
źródło