Lorsque nous avons besoin de plus d'un EntityManager?
-
24-09-2019 - |
Question
J'apprends JPA et ai une question:
Dans quelles situations nous avons besoin de plus d'un EntityManager
dans notre application?
Les deux situations que je connais sont les suivantes:
-
Lorsque notre application est une application multi-thread et plus d'un thread a besoin transaction JPA parce
EntityManager
est thread-safe et nous avons besoin d'unEntityManager
par fil. -
Lorsqu'un du fil a besoin de plusieurs transactions simultanées, nous avons besoin de plus d'un
EntityManager
dans ce fil parce qu'il ya une relation univoque entreEntityManager
etEntityTransaction
.
Q1. Y at-il d'autres situations où nous avons besoin de plus d'un EntityManager
?
Q2. Upto ma compréhension, il devrait y avoir qu'une seule EntityManagerFactory
par unité de persistance. Ai-je raison? Sinon, quelles sont les situations où nous avons besoin de multiples EntityManagerFactory
par persistance Unité?
La solution
Q1: Le EntityManager
est préférable d'être comparé à la « bonne vieille » Mise en veille prolongée Session
: une unité de travail (une simple action d'entreprise, par exemple « l'exploitation forestière dans un utilisateur », « passer une commande », etc.). Il est pas nécessairement liée à un seul fil. Vous ne courir en difficulté si les différents threads exécutent des tâches DB qui dépend de l'autre à l'intérieur d'une seule unité de travail. Vous auriez besoin de les exécuter en synchronisation (de préférence, pour un seul fil). Si par exemple vous avez l'exigence d'affaires pour nettoyer certains « anciens journaux » lorsqu'un des utilisateur se connecte à (dont on pourrait raisonnablement pas déranger l'information de l'autre), vous pouvez parfaitement l'exécuter dans deux threads séparés à l'intérieur d'une seule unité de travail.
Q2: Votre interprétation est correcte. Vous pouvez toutefois créer plus d'un, mais ce ne serait pas de sens, ni avoir des avantages. Il ajouterait que les frais généraux importants.