2011-12-22 3 views
2

Entity Manager 인스턴스 인 jboss가 관리하고 제공하는 것은 지속성 컨텍스트에 바인딩 된 실제 구현에 대한 프록시입니다.jboss가 관리되는 Entity Manager 동시성 문제를 처리합니까?

이 실제 구현은 JTA 트랜잭션 (트랜잭션 컨텍스트 당)이 제공하는 격리를 수집합니다.

프록시 인스턴스를 처리 할 때 동시성 문제에 대해 걱정할 필요가 없다고 생각합니다.

아마도 컨테이너 삽입 대신 JNDI 조회에서 가져 오려면이 프록시 인스턴스를 캐시 할 수 있습니까?

합리적인가요?

답변

3

컨테이너는 @PersistenceContext 어노테이션 및 주입 EntityManagers의 스캔을 담당합니다. EntityManager의 인스턴스를 프록시 처리 할 수 ​​있습니다.

컨테이너에서 종속성 삽입을 담당하는 EJB에서는 스레드로부터 안전하다는 것을 확신 할 수 있습니다. 지속성 컨텍스트는 동일한 트랜잭션 내의 여러 구성 요소간에 공유됩니다. 당신이 (동시성이 우려입니다) 서블릿 환경에서 @PersistenceContext을 사용하여이 EntityManager를 주입하는 경우

그러나, 당신이있어 하지 스레드 안전합니다. 대신 @PersistenceUnit을 사용해야합니다. 당신은 JBoss 7 JPA Reference Guide의이 부분을 참조 할 수 있습니다 :

엔티티 관리자는 스레드 안전을 것으로 예상되지 않는다는 것을 명심 ( 여러 스레드에 볼 수있는 서블릿 클래스 변수에 주입하지 않는다).

몇 시간 전 내가 지속성 컨텍스트는 컨테이너가 JTA 거래와 EntityManagers의 프록시 사이에 공유에 대해 알고 있으며 here을 발표 것을 표현했습니다. 당신이 유용하다고 생각하기를 바랍니다.

관련 문제