2013-06-23 3 views
1

EJB에서 새로운 기능입니다. 빈 관리 트랜잭션 (BMT)의 부작용 중 하나는 다른 BMT 빈의 메소드를 호출하면 트랜잭션이 전파되지 않는다는 것입니다. 그러나 세 번째 ACID 속성 (분리)으로 인해 두 번째 메서드 (inner)가 첫 번째 메서드 (outer)에서 변경된 내용을 보지 못합니다.빈 관리 트랜잭션 : 트랜잭션 전파

답변

1

빈 관리 트랜잭션은 빈에서 트랜잭션 경계를 직접 코딩한다는 것을 의미합니다.

컨테이너 관리 트랜잭션은 컨테이너 (예 : 응용 프로그램 서버)가 거래를 시작, 종료, 롤백하는 등 더러운 작업을 수행하도록합니다.

두 경우 모두 현재 트랜잭션에 액세스하거나 새 트랜잭션을 만들 때 주로 중앙 트랜잭션 관리자가 사용됩니다.

그것은 두 번째 방법 (내부)을 는 (외부) 첫번째 방법

에서 변경된 것으로 변경 내용을 확인하지 않을 것이라는 의미 하는가 동일한 TransactionManager를 (동일한 트랜잭션을 사용하면) 두 메서드에서 내부 메서드는 외부 변경 내용을 볼합니다.

+0

하지만 두 개의 stateless bean 두 가지 메소드에서 동일한 트랜잭션/트랜잭션 관리자를 사용하는 방법. 예를 들어 메소드 인수를 전달해야 할 필요가 있습니까? –

+1

EJB를 사용하는 경우 EJBContext에 @Resource 주석을 삽입 한 다음 context.getUserTransaction()을 호출하여 트랜잭션을 가져올 수 있습니다. 외부 메소드에서 내부 메소드로 트랜잭션을 전달할 필요가 없습니다. 사용하는 프레임 워크 (예 : 데이터베이스 액세스를위한 최대 절전 모드)가 현재 열려있는 트랜잭션을 자동으로 사용하기 때문입니다. – Tom