Kiedy potrzebujemy więcej niż jednego Entitymanagera?
Uczę się JPA i mam jedno pytanie:
W jakich sytuacjach potrzebujemy więcej niż jednego EntityManager
w naszej aplikacji?
Dwie sytuacje, o których Wiem, są następujące:
Gdy nasza aplikacja jest aplikacją wielowątkową i więcej niż jeden wątek wymaga transakcji JPA, ponieważ
EntityManager
nie jest bezpieczny dla wątku i potrzebujemy jednegoEntityManager
Na wątek.Gdy którykolwiek z wątków wymaga wielu jednoczesnych transakcji, potrzebujemy więcej niż jeden
EntityManager
w tym wątku, ponieważ istnieje relacja jeden do jednego międzyEntityManager
aEntityTransaction
.
Q1. Czy są jakieś inne sytuacje, kiedy potrzebujemy więcej niż jednego EntityManager
?
Q2. Do mojego zrozumienia, powinno być tylko jeden EntityManagerFactory
na jednostkę wytrwałości. Mam rację? Jeśli nie, to jakie są sytuacje, w których potrzebujemy wielokrotności EntityManagerFactory
na jednostkę trwałości?
1 answers
Q1: EntityManager
najlepiej porównać z" starym, dobrym "Hibernatem Session
: jednostką pracy (prostą czynnością biznesową, np. "logowanie użytkownika", "składanie zamówienia", itp.). Niekoniecznie jest związany z pojedynczym wątkiem. Będziesz działał tylko w kłopotach, jeśli różne wątki wykonają zadania DB, które zależą od siebie nawzajem wewnątrz jednej jednostki pracy. Trzeba by je wykonać w synchronizacji (najlepiej, w kolejności w jednym wątku). Jeśli na przykład masz wymóg biznesowy, aby posprzątać niektóre "stare logi" kiedy użytkownik loguje się (co rozsądnie nie przeszkadzałoby sobie nawzajem w informacjach), można je doskonale wykonać w dwóch oddzielnych wątkach wewnątrz jednej jednostki pracy.
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-04-06 17:01:22