Bonjour,

Je me demandais quelle était la méthode recommandée pour gérer les EntityManager (pour un serveur qui ne les gère pas et ne permet de les injecter, ex Tomcat)

J'ai suivi le tuto d'oracle JEE7 puis JEE5 et dans ce dernier la technique suivante était utilisée :
- Création d'un EntityManager à l'initialisation de l'application via un context listener et positionnement de cette instance dans un attribut du "servlet context" ; pus récupération de cette instance au besoin dans les différents servlets via l'attribut du servlet context.
J'ai trouvé ça bizarre car rien ne dit que l'EntityManager est thread safe, d'autant que ya d'autres objets qui sont positionnés en attribut du servlet context et qui ont eu toutes les précautions pour une utilisation multi threadée.

Les solutions que je vois :
- Création d'un EntityManager à chaque exécution de servlet (= chaque requete), afin que chaque thread ait le sien ; avec le surcoût d'une connexion/déconnexion à la bdd à chaque page, ce qui me semble pas non plus trop dérangeant.
- Utilisation d'un objet commun pour l'accès aux données, de la même manière que dans le tuto JEE5 (ou avec un session bean "application" si le serveur gère ça) mais avec tout ce qu'il faut pour une utilisation multithreadée. Avec l'inconvénient que ça peut être un goulot d'étranglement pour l'application si y a qu'un seul thread qui peut demander telles données en même temps.

Merci