@PersistenceContext EntityManager segurança de thread no Spring e no Java EE
EntityManager
énão é thread-safe por definição. Specs Servlets diz que em ambiente não distribuído e sem implementaçãoSingleThreadModel
, Há simapenas uma instância de servlet por definição.
Portanto, no Java EE quando você injetarEntityManager
através de@PersistenceContext
no campo de Servlet - não é thread seguro:
<code>public class MyServlet extends HttpServlet { // Not thread-safe, should be using EMF instead. @PersistenceContext private EntityManager em; } </code>
É correto dizer que, embora o escopo padrão dos beans Spring seja singleton, oEntityManager
é thread-safe como o Spring usaThreadLocal
para vincular sua transação eEntityManager
para isso?
O exemplo de Servlets acima ainda é válido no Spring? Ainda não é thread-safe?
OThreadLocal
a abordagem funciona apenas para beans gerenciados pelo Spring e o servlet simples não é um desses?
Tanto quanto me lembro, é a responsabilidade do recipiente para injetar oEntityManager
. Na implementação do Java EE Glassfish, foi o servidor de aplicativos que descobriu@PersistenceContext
como ponto de injeção.
Como se parece na primavera? O Spring Framework é responsável por descobrir essas anotações ou é responsabilidade do implementador da JPA?