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'un EntityManager 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 entre EntityManager et EntityTransaction.


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é?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top