Dos JPA-específicas vienen a la mente:
EntityManager no se garantiza que se threadsafe por la especificación JPA. Por lo tanto, las aplicaciones JPA portátiles solo pueden usar un EM en un hilo a la vez. El modismo de crear un EM local de método y cerrarlo antes de que salga del alcance alienta el confinamiento de la pila de referencias de EM.
Un EM que usa el Contexto de persistencia "Extendida" Lifetime mantiene un único contexto de persistencia para toda su existencia. Esto significa que las entidades dejan de separarse automáticamente en commit()
. En su lugar, deben separarse manualmente, de lo contrario, el EM sigue siendo responsable de rastrearlos.
Esta pregunta es realmente una versión específica de JPA de la antigua pregunta "cuando agrupar objetos". Esa es una pregunta difícil, pero la respuesta probablemente sea "raramente".
Este old developerWorks post del experto en concurrencia de Java Brian Goetz expone el punto. Los pools: gist tienen mucho sentido para los objetos costosos, como las conexiones de bases de datos. Pero para objetos de vida corta, pequeños y de inicialización rápida, como EntityManager, la puesta en común o alguna otra forma de retención de referencia a largo plazo es difícil de vender.
Pero, es una pregunta general, por lo que es probable que haya excepciones. Tal vez la aplicación es simple o singlethreaded. Entonces estas preocupaciones sobre la seguridad de hilos se vuelven discutibles.