복붙노트

[SPRING] @PersistenceContext Spring 및 Java EE의 EntityManager 스레드 안전성

SPRING

@PersistenceContext Spring 및 Java EE의 EntityManager 스레드 안전성

EntityManager는 정의에 의해 스레드로부터 안전하지 않습니다. 서블릿 스펙은 비 분산 환경에서 SingleThreadModel을 구현하지 않고 정의 당 서블릿 인스턴스가 하나만 있다고합니다.

따라서 Java EE에서 @PersistenceContext를 통해 EntityManager를 Servlet의 필드에 삽입 할 때 스레드 안전성이 보장되지 않습니다.

public class MyServlet extends HttpServlet {

    // Not thread-safe, should be using EMF instead.
    @PersistenceContext
    private EntityManager em;
}

해결법

  1. ==============================

    1.질문 2, 3, 4 - Spring Bean이 아닌 클래스에는 Spring이주의를 기울이지 않습니다. 따라서 Spring은 MyServlet 클래스에주의를 기울이지 않습니다. 따라서

    질문 2, 3, 4 - Spring Bean이 아닌 클래스에는 Spring이주의를 기울이지 않습니다. 따라서 Spring은 MyServlet 클래스에주의를 기울이지 않습니다. 따라서

    질문 1). 이 방법으로 작동하므로 Spring Injected Entity Manager의 사용법은 효과적인 스레드 저장입니다.

  2. from https://stackoverflow.com/questions/10380539/persistencecontext-entitymanager-thread-safety-in-spring-and-java-ee by cc-by-sa and MIT license