Persistence unit jako resource LOCAL czy JTA?

Mam pytania jak poniżej:

    Jaka jest różnica między tymi dwoma?
  1. czy oba są obsługiwane przez wszystkie bazy danych?
  2. czy JPA TransactionManager i JTA TransactionManager są różne?
Author: informatik01, 2009-12-26

3 answers

Implementacje JPA mają do wyboru 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. Wykorzystywałoby to podstawowe transakcje na poziomie JDBC. Minusem jest to, że transakcja jest lokalna dla jednostki trwałości JPA, więc jeśli chcesz transakcji obejmującej wiele jednostek trwałości (lub innych baz danych), to RESOURCE_LOCAL może nie być wystarczająco dobry.

JTA jest również używany do zarządzanie transakcjami w systemach takich jak JMS i JCA, ale to dość egzotyczne użycie dla większości z nas.

Aby korzystać z JTA, potrzebujesz wsparcia dla niego na serwerze aplikacji, a także wsparcia ze sterownika JDBC.

 87
Author: skaffman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-26 09:47:52

jako dodatek do innych odpowiedzi

Oto fragment z niezwykle przydatnego artykułu (opublikowanego na stronie internetowej Apache TomEE), który może również pomóc odpowiedzieć na pierwsze pytanie OP (link do artykułu znajduje się poniżej).


Porównanie resource_local i JTA persistence konteksty


With ty jesteś odpowiedzialny za EntityManager (PersistenceContext/Cache) tworzenie i śledzenie...

  • You must use the EntityManagerFactory aby uzyskać EntityManager
  • wynikowa instancja EntityManager is A PersistenceContext/Cache
  • na EntityManagerFactory można wstrzykiwać za pomocą @PersistenceUnit tylko adnotacja (nie @PersistenceContext)
  • nie wolno Ci użyj @PersistenceContext do odnosi się do jednostki typu RESOURCE_LOCAL
  • You must use the Entitransaction API do rozpoczęcia / zatwierdzenia every call to your EntityManger
  • Calling entityManagerFactory.createEntityManager () dwukrotnie powoduje dwa oddzielne instancje EntityManager i ich dwa oddzielne pliki/cache.
  • Informatyka czy prawie nigdy dobrym pomysłem jest posiadanie więcej niż jednego instancja Entitymanagera w użyj (nie twórz drugi chyba, że zniszczyłeś pierwszy)


With the CONTAINER zrobi EntityManager (PersistenceContext/Cache) tworzenie i śledzenie...

  • You cannot use the EntityManagerFactory aby uzyskać EntityManager
  • Możesz otrzymać tylko EntityManager dostarczony przez pojemnik
  • na EntityManager można wstrzykiwać za pomocą @PersistenceContext tylko adnotacje (nie @PersistenceUnit)
  • jesteś Nie wolno używać @PersistenceUnit w odniesieniu do jednostka typu JTA
  • EntityManager podany przez pojemnik jest odniesieniem do Persistencekontekst / Pamięć podręczna związana z transakcją JTA.
  • jeśli transakcja JTA nie jest w toku, EntityManager nie można użyć, ponieważ nie ma PersistenceContext / Cache.
  • każdy z EntityManager odniesienie do tej samej jednostki W tej samej transakcja będzie miała automatycznie odniesienie do same PersistenceContext / Cache
  • na PersistenceContext / Cache jest spłukany i wyczyszczony w JTA commit time

Osoby zainteresowane nauką Java Persistence API-zrób sobie przysługę i przeczytaj cały artykuł tutaj: JPA Koncepcje: JPA 101 .

 63
Author: informatik01,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-16 10:46:31

Resource_Local i JTA są menedżerami transakcji (metody dokonywania transakcji). Nie jest to właściwość 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. JTA transaction manager jest menedżerem transakcji ogólnego przeznaczenia i może pozyskiwać inne zasoby, takie jak kolejki JMS w transakcji. Typowo Kontenery Java EE wykorzystują menedżera transakcji JTA dla podmiotów EJB, JPA itp.

 16
Author: Chandra Patni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-26 03:25:47