Transaction 이란.
: 컴퓨터 프로그램에서 트랜잭션의 일반적인 의미는 정보의 교환이나 데이터베이스 갱신 등
연관되는 작업들에 대한 일련의 연속을 의미한다. (http://www.terms.co.kr/transaction.htm)
이번 프로젝트에 ORM이 무엇인지도 처음 들었고 또한 ORM프레임워크중에 한 종류인 Hibernate또한
처음 사용해보면서 느꼈던 점은 ..
어렵다 이다.-_-; 마냥 어려운거임.
뭐 어찌됐든 프로그래머로써 Transaction을 무시할 수 있는 프로그래머는 없을터.
프로젝트를 진행하던 도중 org.hibernate.TransactionException: Transaction not successfully started의
예외상황이 자꾸 발생하길래 디버깅 고고.
(사실은 무시하려했지만 심각 :
Servlet.service() for servlet default threw exception이라는 메세지만 내가 보지 못했더라면...ㅋㅋ)
현재 MVC 프레임워크로 Struts2를 사용하고 있는데 이 에러가 나는 페이지들을 검사해 보았더니
Action이 Chain으로 묶여있는(연쇄호출되는) 요청들은 다 이 예외를 뱉어내고 있었다.
트랜잭션 begin -> 커밋 or 롤백 -> 트랜잭션 close의 정상적인 과정이 아닌 중간에 커밋하지 않고 begin을 두번 수행하는걸 발견 (커밋이 두번이였던가.-_-;; 뭐어쨌든 발견했다는게 중요한거 아니겠음?)
현재 트랜잭션의 코딩 패턴은 OSIV패턴(Open session in view)으로 구현되어있었고.
(최범균저 (Hibernate3 프로그래밍) 책에 나와있는 패턴)
책에는 Servlet Filter로 구현되어있었지만 현재 프로젝트에선 Interceptor로 구현.
정확하고 자세한 건 Struts2의 Interceptor의 아키텍쳐를 다시 한번 봐야겠지만
Chain으로 또 다른 Action을 수행할때에 다시 한번 Interceptor를 타기때문에 commit하기도 전에 또다시
Transaction을 begin하는것 같았다.
결국 Interceptor로 구현되어있는 Transaction처리 로직을 Servlet Filter로 재구현해서 테스트해서
다행히 이 문제를 해결.
(또 나면 어쩌지?ㅠㅠ)
: 컴퓨터 프로그램에서 트랜잭션의 일반적인 의미는 정보의 교환이나 데이터베이스 갱신 등
연관되는 작업들에 대한 일련의 연속을 의미한다. (http://www.terms.co.kr/transaction.htm)
이번 프로젝트에 ORM이 무엇인지도 처음 들었고 또한 ORM프레임워크중에 한 종류인 Hibernate또한
처음 사용해보면서 느꼈던 점은 ..
어렵다 이다.-_-; 마냥 어려운거임.
뭐 어찌됐든 프로그래머로써 Transaction을 무시할 수 있는 프로그래머는 없을터.
프로젝트를 진행하던 도중 org.hibernate.TransactionException: Transaction not successfully started의
예외상황이 자꾸 발생하길래 디버깅 고고.
(사실은 무시하려했지만 심각 :
Servlet.service() for servlet default threw exception이라는 메세지만 내가 보지 못했더라면...ㅋㅋ)
현재 MVC 프레임워크로 Struts2를 사용하고 있는데 이 에러가 나는 페이지들을 검사해 보았더니
Action이 Chain으로 묶여있는(연쇄호출되는) 요청들은 다 이 예외를 뱉어내고 있었다.
트랜잭션 begin -> 커밋 or 롤백 -> 트랜잭션 close의 정상적인 과정이 아닌 중간에 커밋하지 않고 begin을 두번 수행하는걸 발견 (커밋이 두번이였던가.-_-;; 뭐어쨌든 발견했다는게 중요한거 아니겠음?)
현재 트랜잭션의 코딩 패턴은 OSIV패턴(Open session in view)으로 구현되어있었고.
(최범균저 (Hibernate3 프로그래밍) 책에 나와있는 패턴)
책에는 Servlet Filter로 구현되어있었지만 현재 프로젝트에선 Interceptor로 구현.
정확하고 자세한 건 Struts2의 Interceptor의 아키텍쳐를 다시 한번 봐야겠지만
Chain으로 또 다른 Action을 수행할때에 다시 한번 Interceptor를 타기때문에 commit하기도 전에 또다시
Transaction을 begin하는것 같았다.
결국 Interceptor로 구현되어있는 Transaction처리 로직을 Servlet Filter로 재구현해서 테스트해서
다행히 이 문제를 해결.
(또 나면 어쩌지?ㅠㅠ)
이 포스팅을 100% 전적으로 믿지 마세요.(나중에 또 이상황이 발생했을때 참고하려고 적는 글입니다.)
'language > java' 카테고리의 다른 글
Out Of Memory (7) | 2009.06.12 |
---|---|
리눅스 or 유닉스 시스템에서 java.awt 패키지 사용하기 (0) | 2008.08.28 |
Commons-Lang StringUtils Class 활용 (0) | 2008.06.28 |
tomcat 5.5, Jakarta connection pool(DBCP), 이클립스 설정 (0) | 2008.05.16 |
jsp파일을 Excel파일로 출력(저장) (1) | 2008.05.13 |