2011년 6월 9일 목요일

EJB 트렌젝션의 종류

분산 트랜잭션
       |
       |---->컨테이너 관리 트랜젝션
       |
       |----> 빈 관리 트랜젝션
                            |
                            |----> JDBC 트랜젝션
                            |
                            |----> JTA 트랜젝션

세션빈의 경우에는 빈관리 트렌젝션과 컨테이너 관리 트렌젝션을 모두 사용할 수 있습니다.
엔티티빈은 컨테이너 관리 트렌젝션만 사용할 수 있습니다.

1. 컨테이너 관리 트렌젝션이란 무엇인가?
- 배치스크립터에 트랜젝션 속성을 설정한다.
- java.sql.Connection.commit(), setAutoCommit(), rollback()이나
javax.jms.Session의 commit(), rollback()를 사용해서는 안된다.
- 세션빈은 javax.ejb.SessionSynchronization 인터페이스를 임플리먼츠 할수있다.
- 컨테이너 관리 트랜젝션을 사용하는 EJB는 절대로 Commit 되지않도록 EJBContext의
setRollbackOnly메서드를 사용할수있다. 이렇게 되면 예외가 발행하여도 컨테이너는 자동으로
트랜젝션을 롤백하지 않는다.
- JMS 메시지는 트랜젝션이 커밋되기 전까지 메시지가 최종 목적지에 전달되지 않는다.
- 컨테이너가 트랜젝션을 롤백시키는 경우에 트랜젝션내에서 변경된 데이터베이스의 내용들은
모두 취소된다. 따라서 엔티티 빈들의 내용도 자동적으로 롤백된다.
그러나, 세션빈의 변경된 내용들은 자동적으로 취소되지 않기 때문에 필요한 경우에는
프로그래머가 명시적으로 초기화하는 코드를 작성해야 한다.
즉 SessionSynchronization(이거 저번시간에 말씀드린 세션빈의 동기화메서드입니다.)
---> 이것은 엔티티는 맵핑이라는게 있어서 테이블 내용이 바뀌면 자동으로 초기화
되지만 세션빈은 그런게 없어서 동기화 메서드를 따로 사용해야한다는 겁니다.

2. 빈관리 트렌젝션이란 무엇인가?
1) JDBC 트랜젝션
-이것은 우리가 일반적으로 알고있는 commit(), rollback() 이니깐 자세한것은 생략합니다.
2) JTA
EJB컨테이너가 꼭 지원해야하는 기능은 아님니다.
그리고 ^^ JTA는 책을 봐도 도대체 무신말을 하는건지 모르겠군요^^
누구 JTA를 잘아시는 분은 내용좀 올려 주십시요^^
--> 결론을 내리자면 제 생각에 세션빈에서는 분산 트렌젝션이 잘된다. 하지만 세션빈의 특성상
트렌젝션 롤백에 의한 초기화가 필요할 경우 프로그래머가 동기화메서드를 이용하여 초기화
코드를 작성해야 한다!

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...