▶ 뭉충닷컴
 
mungchung.com login
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -PHP
   -JavaScript
   -HTML
   -Java/JSP
   -Database
   -Crystal Report
   -Visual Basic
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda

Spring @Transactional 사용시 rollback이 안될 경우

조회 수 13103 추천 수 0 2012.06.03 16:14:21

Spring의 트랜잭션처리를 공부하려고 샘플 프로젝트 만들고 테스트 하는데 이상하게 @Transactional 어노테이션을 사용하면 rollback이 안된다. 몇 시간 동안 삽질한 끝에 결국 원인을 찾아냈다.
같은 오류로 어려움을 겪고 있다면 아래 해결방법들을 이용해보면 된다.

 


1. mysql 데이터베이스를 사용할경우 테이블 타입 확인
mysql은 테이블타입이 InnoDB일때만 트랜잭션이 동작한다고한다. 테이블 타입을 확인해보고 InnoDB로 변경해준다.

 

 

 

2. 인터페이스 코드 유무 확인
트랜잭션을 이용할 클래스들이 인터페이스를 사용하는지 확인해봐야한다.
@Transactional 어노테이션 같은경우 Spring AOP를 이용하게 되는데 이 AOP는 기본적으로 Dynamic Proxy를 이용한다.
Dynamic Proxy는 인터페이스 기반으로 동작하기 때문에 인터페이스가 없을경우 트랜잭션이 동작하지 않는다.

 

내가 테스트한 코드들이 인터페이스가 없고 클래스만 만들었었는데 이 이유 때문에 오류가 발생했던것이다.

 

인터페이스 없이 트랜잭션 동작하게 하려면  CGLib(Code Generation Library) Proxy를 이용하면 된다.
CGLib Proxy는 클래스에 대한 Proxy가 가능하기 때문에 인터페이스가 없어도 된다.
CGLib Proxy를 이용하는 방법은 다음과 같다.

 

1) maven에 cglib 추가

<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>2.2</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>

 

 

2) servlet context에 proxy-target-class 속성 추가

<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<tx:annotation-driven proxy-target-class="true"/>

...

</beans:beans>

 이렇게 설정해주고 transaction 테스트 하니 내 경우 잘 동작했다.

 

만일 cglib 라이브러리를 추가 안하고 proxy-target-class 속성을 이용하게 되면 아래와 같은 오류메시지가 나타난다

Initialization of bean failed; nested exception is org.springframework.aop.framework.AopConfigException: Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the class path or specify proxy interfaces.

 

 

3. application context 설정 파일에 transaction 관련 설정있는지 확인

DB설정 부분 application context 쪽에 할 경우, 이 DB설정은 servlet context쪽에 설정된 Bean들에는 적용이 안된다.

그래서 transaction관련 설정을 servlet context에 해줘야한다.

아래 구문이 application context에 있다면 servlet context 로 옮겨준다.

<tx:annotation-driven proxy-target-class="true"/>

 

 

 

 

 

마지막으로, JDK Dynamic Proxy와 CGLIB Proxy에 대한 자세한 내용을 알고 싶다면 http://wiki.javajigi.net/pages/viewpage.action?pageId=1065 참고하면 된다.

 

 

문서 첨부 제한 : 0Byte/ 2.00MB
파일 크기 제한 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 Spring 3.0 게시판 뭉충닷컴 2011-08-07 4493
25 Spring Controller의 메서드에 사용될수 있는 파라미터 종류 뭉충닷컴 2012-11-01 7176
24 Spring에서 requestURL 가져올때 URL을 /WEB-INF/views/.. 로 가져오는 이유 뭉충닷컴 2012-10-31 7281
23 Spring의 어노테이션 정보 읽기 뭉충닷컴 2012-10-29 5687
22 Spring MVC 기본 흐름 file 뭉충닷컴 2012-10-23 6715
21 custom taglib 만들때 spring bean 사용하기 뭉충닷컴 2012-08-29 8602
20 STS에서 한글에 String literal is not properly closed by a double-quote 오류가 날 경우 file 뭉충닷컴 2012-07-03 4157
19 Spring @Transactional 어노테이션을 이용한 트랜잭션 예제 file 뭉충닷컴 2012-06-04 8206
» Spring @Transactional 사용시 rollback이 안될 경우 뭉충닷컴 2012-06-03 13103
17 한글때문에 xml 파싱시 오류날 경우 (URI$MalformedURIException 오류) file 뭉충닷컴 2012-06-02 5266
16 maven에 ojdbc14 추가하기 뭉충닷컴 2012-06-01 5327
15 HandlerInterceptor 간단한 사용 예제 file 뭉충닷컴 2012-03-08 8272
14 Spring Template Project 이용시 maven 빌드를 제대로 못할경우 file [1] 뭉충닷컴 2012-03-07 6028
13 Spring에서 Quartz 이용하기 (스케줄이용방법) file [1] 뭉충닷컴 2012-03-06 13339
12 Spring AOP (Aspect Oriented Programming) 뭉충닷컴 2012-03-05 2689
11 Spring의 HandlerMapping 종류및 사용방법 file 뭉충닷컴 2012-03-04 5788
10 maven을 이용해 배포(Deploy) 대상에 따라서 환경설정(resources) 다르게 적용하기 file [1] 뭉충닷컴 2012-03-03 35403
9 일반 Spring 프로젝트를 Web 프로젝트로 변경하기 file 뭉충닷컴 2012-03-03 4413
8 URL과 Controller 간단하게 연결해주는 HandlerMapping 처리 방법 뭉충닷컴 2012-03-03 4567
7 Spring에서 Session을 이용한 로그인 처리 예제 file [12] 뭉충닷컴 2012-03-02 62836
6 뷰 컨트롤러에서 ModelAndView 개체를 직접 생성하는 방법 뭉충닷컴 2012-03-01 6972
5 Root Application Context와 Servlet Context file 뭉충닷컴 2012-02-29 10336
4 STS의 Spring Template Project를 이용한 간단한 Spring MVC 웹 프로젝트 file [15] 뭉충닷컴 2012-02-29 13684
3 스테레오타입 어노테이션을 이용한 자동 빈 등록 file 뭉충닷컴 2012-02-28 2695
2 Spring에서 Bean 등록 여러가지 방법 뭉충닷컴 2012-02-28 4462
1 component:context-scan으로 설정되어있는 Bean들 확인하는 방법 file 뭉충닷컴 2012-02-24 3025