2015-01-03 2 views
1

우리는 아래에 주어진 2 개의 EJB 세션 빈을 가지고 있습니다.비동기식 ejb 메소드 호출에서 트랜잭션 전파

@Stateless 
public class MyStatelessSessionBean{ 
     @EJB 
     MyStatefulSessionBean statefulBean; 
     public void methodA(){ 
      statefulBea.methodB(); 
     } 
} 

@Stateful 
@ TransactionAttribute(TransactionAttributeType.REQUIRED) 
public class MyStatefulSessionBean { 
    @Asynchronous 
    public void methodB(){ 
    } 

} 

트랜잭션에없는 클라이언트는 MyStatelessSessionBean의 methodA를 호출합니다. 모든 처리가 완료된 후 컨테이너에서 얼마나 많은 distict 트랜잭션을 시작할 것입니까?

+0

** 내 이해에 따르면, 2 트랜잭션은 EJB 컨테이너에 의해 시작됩니다. ** _As 클라이언트는 활성 트랜잭션없이 MyStatelessSessionBean의 methodA를 호출합니다. 컨테이너는 기본적으로 methodA에 대한 새 트랜잭션을 시작합니다. TransactionAttributeType.REQUIRED. TransactionAttributeType.REQUIRED로 표시된 비동기 methodB가 호출되면 컨테이너는 새 트랜잭션을 다시 시작합니다 ._ – sauumum

답변

3

2 개의 트랜잭션이 시작됩니다. EJB 3.1 사양이 4.5.3 절에 나와 있듯이

클라이언트 트랜잭션 컨텍스트가 비동기 메서드 호출과 함께 전파되지 않습니다. Bean Developer의 관점에서 볼 때 클라이언트에서 트랜잭션 컨텍스트가 유입되지 않습니다. 예를 들어 비동기 메소드의 REQUIRED 트랜잭션 속성의 의미가 REQUIRES_NEW와 정확히 동일하다는 것을 의미합니다.