2013-12-20 4 views
0

EJB 3.0 트랜잭션 전파와 관련하여 다음 기본 질문이 있습니다.EJB 3.0 트랜잭션 전파

이것은 제 시나리오입니다 : EJB 서비스 -> POJO -> EJB Dao. 조직 내에서 몇 가지 제약으로 인해이 아키텍처를 고수해야합니다.

그래서 EJB 서비스 Tx가 시작될 때 로컬 EJB DAO를 반환하는 POJO로 이동합니다. 이제 EJB DAO의 메소드 내에서 퍼시스턴스 컨텍스트와 Entity Manager를 삽입하고 메소드는 TransactionAttribute (필수)로 주석 처리되었다. 그래서 내 질문은 DAO EJB 내부에서 서비스 EJB의 트랜잭션 컨텍스트를 사용할지 아니면 중간에 POJO 계층으로 인해 새 트랜잭션을 시작할지 여부입니다.

도움을 주시면 감사하겠습니다.

Thanks..Vijay 트랜잭션이 "EJB 서비스"에서 시작되기 때문에

답변

1

, 그것은는 "EJB의 DAO"에 전파됩니다. 트랜잭션은 일종의 스레드 로컬로 설정됩니다 (적어도 개념적으로 구현 방법은 알지 못합니다). POJO가 newlly 만든 스레드에서 DAO를 실행하는 것과 같은 작업을 수행하지 않는 한 (수동으로 생성 된 스레드는 Java EE에는 적합하지 않습니다.)

+0

감사합니다. POJO의 책임은 주로 메모리 내 로직을 수행하고 DAO 레이어를 지속성으로 사용하는 것입니다. 이 결과로 컨텍스트 검색을 통해 로컬 참조를 가져 와서 해당 메소드를 호출합니다. 그래서 괜찮을 것 같아요. – user2214717

+0

예, 사실은 (이 예외 케이스를 덮기 위해 실제로 스레드 생성 항목을 추가했습니다). –

+0

새로 생성 된 스레드에서 실행하는 것은 Java EE에 적합하지 않습니다. 그러나 트랜잭션, 보안 컨텍스트 등이 올바르게 전파 될 수 있도록 컨테이너 관리 스레드 풀의 스레드를 사용해야합니다. –