'transaction'에 해당되는 글 1건

  1. 2008.04.04 스프링에서 @Transactional 사용시 주의점 (2)
http://static.springframework.org/spring/docs/2.0.x/reference/transaction.html#transaction-declarative

위 사이트의 9.5.6. Using @Transactional 부분.

첫째, @Transactional은 인터페이스(및 메소드), 구현클래스(및 public 메소드)에 붙일 수 있다.
특히나 public 메소드에만 적용되는 점은 아래와 같이 설명하고 있다.
Method visibility and @Transactional

When using proxies, the @Transactional annotation should only be applied to methods with public visibility. If you do annotate protected, private or package-visible methods with the @Transactional annotation, no error will be raised, but the annotated method will not exhibit the configured transactional settings. Consider the use of AspectJ (see below) if you need to annotate non-public methods.

둘째, self-invocation 상황(내부 호출)에서는 적용되지 않는다. 즉 외부의 클래스에서 그 메소드를
호출해야 트랜잭션이 걸린다.

Note: Since this mechanism is based on proxies, only 'external' method calls coming in through the proxy will be intercepted. This means that 'self-invocation', i.e. a method within the target object calling some other method of the target object, won't lead to an actual transaction at runtime even if the invoked method is marked with @Transactional!

며칠 동안 두가지 상황을 모두 겪으면서 삽집한 생각을 하면... 으 ...... 바보같다.. ㅠ.ㅠ

궁금점 : @Transactional을 Class 선언부에 안붙이고 메소드에만 붙이면 어떻게 되는거지?
여기저기 찾아보면 당최 메소드에만 붙어있는 예제가 없다.


신고
Posted by 에코지오

댓글을 달아 주세요

  1. BlogIcon 기선 2008.04.05 00:28 신고  댓글주소  수정/삭제  댓글쓰기

    똑같을 것 같습니다. @Transactional을 클래스 위에 붙이는 것이, 해당 클래스의 모든 public 메소드에 @Transactional을 붙인것과 같지 않을까요?

    결국에는 둘 다 해당 클래스의 프록시를 만들거나(Spring AOP), Weaving(AspectJ 사용시)을 해줄 것 같네요.



티스토리 툴바