•
트랜잭션 동기화를 지원한다.
◦
하나의 쓰레드에서 논리적으로 같은 트랜잭션에 있는 로직들을 물리적으로 같은 트랜잭션에 있도록 지원한다.
◦
definition 을 관리한다.
▪
definition 에는 격리 수준, 전파 레벨, readOnly 등의 정보가 담긴다.
◦
쓰레드로컬에 저장하고, 쓰레드 이름, 메서드 이름으로 같은 트랜잭션인지 확인한다.
◦
map 형태로 저장한다.
◦
getResouce 가 주된 메서드이다.
▪
key 는 메서드 이름, value 는 entityManagerHolder
◦
디버깅해보니, hikariPool-1 은 커넥션 홀더, 메서드(findById, save 등)는 엔터티 매니저 홀더로 가져감. 메서드가 끝나면 map 에서 사라짐
•
사용처
◦
TI → TAS → APTM → JTM
◦
CMMPP(CrudMethodMetadataPostProcessor)
◦
Repository → DefaultQueryHints
◦
EntityManagerFactoryUtils(doGetTransactionalEntityManager)