2013-04-30 4 views
1

안녕 WAS 개발자에 JNDI 룩업, 는 8.0.0.2 WAS : 지속성 컨텍스트-REF 반환 항상 새로운 EntityManager의 인스턴스

내가 선언 지속성 컨텍스트-REF에 JNDI 룩업 항상 새로운 EntityManager의 인스턴스를 반환하는 문제가 . 한 JTA 트랜잭션 내에서 컨테이너가 항상 동일한 EntityManager 인스턴스를 제공 할 것으로 기대합니다. 그러나 하나의 트랜잭션 내에서 여러 EntityManager가 잠금 문제를 일으킨다! 또한 엔티티가 하나의 트랜잭션 내에서 여러 번 (각 EntityManager에 대해)로드 될 수 있으므로 JPA 사용이 최적화되지 않습니다.

EJB3.1 모듈 내의 일부 EJB2.1을 가지고 있으므로 JNDI 조회와 함께 persistence-context-ref를 사용해야합니다. 또한 EntityManager를 컨테이너로 관리하려고합니다.

context.lookup("java:comp/env/persistence/MyPersistence") 

당신은 것입니다 : 연속적으로 오픈 JTA 트랜잭션 내에서 두 번 JNDI 룩업을 지금

<persistence-context-ref> 
    <persistence-context-ref-name>persistence/MyPersistence</persistence-context-ref-name> 
    <persistence-unit-name>MyPersistence</persistence-unit-name> 
</persistence-context-ref> 

: 재현하는

그냥 EJB2.1 세션빈의 지속성 컨텍스트 - 심판 선언 두 개의 서로 다른 EntityManager 인스턴스가 반환되는지 확인한다.

WAS의 결함입니까?

답변

1

persistence-context-ref 룩업에서 반환 된 EntityManager는 실제로 트랜잭션 당 EntityManager에 대한 프록시입니다 (디버거 또는 인쇄에서는 JPATxEntityManager의 인스턴스임을 알 수 있습니다). 따라서 각 조회가 고유 객체 , 그들은 모두 동일한 기본 EntityManager와 상호 작용할 것입니다.