Uczę się JPA i mam jedno pytanie:Kiedy potrzebujemy więcej niż jednego EntityManager?
W jakich sytuacjach potrzebujemy więcej niż jednego EntityManager
w naszej aplikacji?
Dwie sytuacje, że jestem świadom, są następujące:
Gdy nasza aplikacja jest wielowątkowych aplikacji i więcej niż jeden wątek potrzebuje transakcji WZP ponieważ
EntityManager
nie jest bezpieczny wątku i musimy jeden na każdy wątek:EntityManager
.Jeżeli którykolwiek z gwintem potrzebuje wielu jednoczesnych transakcji, musimy więcej niż jeden
EntityManager
w tym wątku ponieważ istnieje relacja jeden-do-jednego międzyEntityManager
iEntityTransaction
.
Q1. Czy są jakieś inne sytuacje, gdy potrzebujemy więcej niż jednego EntityManager
?
Q2. Według mojego zrozumienia, na jednostkę persytencji powinna być tylko jedna jednostka: EntityManagerFactory
. Mam rację? Jeśli nie, to jakie są te sytuacje, gdy potrzebujemy wielu EntityManagerFactory
na jednostkę persystencji?
Dla pierwszego kwartału: domyślam się, że obiekt _Główny zarządca powinien mieć minimalny narzut, ale wciąż mam ochotę zapytać, ile narzutów :) Wow, to, że wątki diff zależą od siebie, są bardziej złożone. Czy można bezpiecznie powiedzieć, że powinieneś mieć 1 EM na wątek? Wtedy upewnisz się, że wychwycisz wszystkie wyjątki, ponieważ masz wiele wątków używających tej samej tabeli, prawda? – thirdy
Tak, ponieważ program EM nie jest bezpieczny w użyciu, można go używać w wielu wątkach, jeśli utworzę wokół niego opakowanie i uwzględnię "zsynchronizowane" metody składowania/aktualizacji w opakowaniu wewnętrznie wywołującym zapis/aktualizację pliku EM. Również nigdy nie usuwam/nie zamykam EM? Myślę, że nadal mogą występować problemy z równoczesnym czytaniem i pisaniem. Czy mógłbyś dać mi znać swoje komentarze na ten temat? – bluelurker