@PersistenceContext EntityManager bezpieczeństwo wątków w Spring i Java EE
EntityManager
jestnie jest bezpieczny dla wątków zgodnie z definicją. Specyfikacje serwletów mówią, że w środowisku nie rozproszonym i bez implementacjiSingleThreadModel
, jesttylko jedna instancja serwletu na definicję.
Dlatego w Java EE po wstrzyknięciuEntityManager
przez@PersistenceContext
w pole serwletu - to nie jest bezpieczne dla wątków:
<code>public class MyServlet extends HttpServlet { // Not thread-safe, should be using EMF instead. @PersistenceContext private EntityManager em; } </code>
Czy to prawda, że nawet jeśli domyślnym zakresem Spring bean jest singleton, toEntityManager
jest bezpieczny dla wątków, jak używa SpringThreadLocal
związać swoją transakcję iEntityManager
do tego?
Czy powyższy przykład serwletów jest nadal ważny na wiosnę? Czy nadal nie jest bezpieczny dla wątków?
Czy toThreadLocal
podejście działa tylko dla fasoli zarządzanej przez Spring, a zwykły serwlet nie jest jednym z nich?
O ile dobrze pamiętam, do obowiązków kontenera należy wstrzyknięcieEntityManager
. W implementacji Glassfish Java EE to serwer aplikacji odkrył@PersistenceContext
jako punkt wtrysku.
Jak to wygląda na wiosnę? Czy Spring Framework jest odpowiedzialny za odkrywanie tych adnotacji lub za ich odpowiedzialność za implementator JPA?