Różnica między "JTA-datasource" i "resource-local" datasource?

Terminy "JTA-datasource" i "resource-local datasource" są dla mnie trochę niejasne. Odkładam to, co rozumiem ( lub zakładam) i chciałbym, żebyś powiedział, Gdzie mam rację / źle.

  • ta sama baza danych może być określana jako jta-datasource lub jako resource local datasource
  • jeśli są wymienione jako JTA-datasource, wtedy beans / inne klasy mogą używać JTA. Stąd interfejs UserTransaction
  • nie można użyć CMT / BMT jeśli źródło danych is resource local
  • jeśli są wymienione jako lokalne źródło danych zasobów, transakcje nie są świadome JTA. Kod może używać interfejsu Entitransaction, ale nie interfejsu UserTransaction

Dzięki!

Author: Manuel Drieschmanns, 2010-07-10

1 answers

Terminy "JTA-datasource" i "resource-local datasource" są dla mnie trochę niejasne.

Myślę, że faktycznie odnosisz się do jta-datasource i non-jta-datasource elementów. W skrócie:

  • jeśli typem transakcji jednostki trwałości jest JTA , element jta-datasource jest używany do deklarowania nazwy JNDI źródła danych JTA, które będą używane do uzyskiwania połączeń. Jest to powszechny przypadek.
  • Jeśli typ transakcji jednostki trwałości jest resource-local , non-jta-data-source powinny być używane do deklarowania nazwy JNDI źródła danych spoza JTA.
    Baza danych może być określana jako jta-datasource lub jako resource local datasource.]}

To jest poprawne. I nie wspomniałem o tym tuż powyżej, ale niektórzy dostawcy nawet pozwalają zadeklarować zarówno jta-datasource i a {[1] } i użyj later do zoptymalizowanego odczytu przez połączenia nie-JTA (tzn. nie będą powiązane z trwająca transakcja JTA).

  • jeśli są wymienione jako JTA-datasource, wtedy beans / inne klasy mogą używać JTA. Stąd interfejs UserTransaction.
Pierwsza część jest poprawna, ostatnia nie do końca. W 2007 roku, po raz pierwszy w historii firmy, w 2008 roku, firma została założona w 2009 roku, a w 2009 roku została założona w 2009 roku.]}
[[17]}metody biznesowe przedsiębiorstwa [...] nie wolno próbować uzyskać ani używać javax.transaction.UserTransaction interfejs.

I sekcja 16.12 interfejs UserTransaction :

Kontener nie może udostępniać interfejsu UserTransaction dla ziaren enterprise, które nie mogą korzystać z tego interfejsu.

Innymi słowy, interfejs UserTransaction nie jest dostępny dla CMT enterprise beans.

  • nie można użyć CMT / BMT, jeśli źródłem danych jest resource local

Sformułowanie jest tutaj trochę mylące, ale powiedziałbym że nie jest to ściśle poprawne. Ze specyfikacji JPA 1.0, sekcja § 5.5 transakcje kontrolne :

Menedżer jednostek zarządzanych aplikacjami może być menedżerem jednostek JTA lub menedżerem jednostek zarządzających zasobami lokalnymi.

...

Zarówno menedżerowie jednostek JTA, jak i resource-local entity managerowie muszą być obsługiwani w kontenerach Java EE web i EJB. W środowisku EJB menedżer jednostek JTA jest zazwyczaj używany.

I sekcja 6.2.1.2 Rodzaj transakcji

Atrybut transaction-type jest używany do określenia, czy menedżerowie jednostek dostarczani przez fabrykę menedżerów jednostek dla jednostki trwałości muszą być menedżerami jednostek JTA lub menedżerami jednostek zasobów lokalnych. Wartość tego elementu to JTA lub RESOURCE_LOCAL. Typ transakcji JTA zakłada, że zostanie dostarczone źródło danych JTA-jak określono w elemencie jta-data-source lub dostarczone przez kontener. Ogólnie, w środowisku Java EE, a transaction-type of RESOURCE_LOCAL zakłada, że zostanie dostarczone źródło danych spoza JTA. W środowisku Java EE, jeśli ten element nie jest określony, domyślnym jest JTA.

Więc możesz użyć application managed entity manager, który może być resource-local entity manager (musisz wprowadzić EntityManagerFactory, aby uzyskać EM z niego w tym przypadku) i nie będzie częścią transakcji JTA. Zobacz tę (bardzo ciekawą) dyskusję .

  • jeśli są wymienione jako lokalne źródło danych zasobów, transakcje nie są świadome JTA. Kod może używać interfejsu Entitransaction, ale nie interfejsu UserTransaction

Ponownie, sformułowanie jest nieco mylące, ale powiedziałbym, że jest to poprawne.

 63
Author: Pascal Thivent,
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
2010-07-10 06:54:30