[추가질의] Exception 및 transaction 관련 문의
- 작성자 :
- 진*대
- 작성일 :
- 2014-10-14 15:50:49
- 조회수 :
- 2,151
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
주신답변 감사드립니다.
그런데... 두가지 질의중 한가지는 답변을 안주신듯 하여 다시 질의드립니다.
1. Jeus, 전자정부프레임워크 환경에서 발생한 Exception 입니다.
ibatis batchupdate 시 SqlMapClient.startTransaction() 호출시 아래와 같은 Exception이 발생되었는데 발생원인이 궁금합니다.
---------- Exception 내용 ----------
com.ibatis.common.jdbc.exception.NestedSQLException: Could not start transaction. Cause: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not start a new transaction. A transaction is already started.
---------------------------------------
datasource는 Jeus JDBC connection pool 사용중이며, DB는 Altibase 입니다.
감사합니다.
그런데... 두가지 질의중 한가지는 답변을 안주신듯 하여 다시 질의드립니다.
1. Jeus, 전자정부프레임워크 환경에서 발생한 Exception 입니다.
ibatis batchupdate 시 SqlMapClient.startTransaction() 호출시 아래와 같은 Exception이 발생되었는데 발생원인이 궁금합니다.
---------- Exception 내용 ----------
com.ibatis.common.jdbc.exception.NestedSQLException: Could not start transaction. Cause: com.ibatis.sqlmap.engine.transaction.TransactionException: TransactionManager could not start a new transaction. A transaction is already started.
---------------------------------------
datasource는 Jeus JDBC connection pool 사용중이며, DB는 Altibase 입니다.
감사합니다.
A
안녕하세요.
해당 코드는 직접 구현하신 코드 같습니다.
전자정부 표준프레임워크는 코드 내에서 트랜잭션을 직접 관리하지 않고,
스프링 트랜잭션 기능을 이용해서 처리하고 있습니다.
해당 예외는 동일한 세션이 연결된 상태에서 종료되지 않고 이미 시작된 트랜잭션이 있음에도 불구하고,
새로운 트랜잭션을 시작하려고 하는 경우입니다. (ibatis TransactionManager의 begin() 메서드 참조)
기본적으로 하나의 세션당 하나의 트랜잭션을 처리하게 됩니다. (하나의 메서드만 처리한다는 것이 아님, 여러 개의 메서드를 묶어 하나의 트랜잭션으로 구성 가능)
즉 가장 상위에 있는 update 메소드를 호출하면서 생성된 세션에서
2개의 transaction을 생성하셨기 때문에 발생한 문제가 아닐까 합니다.
이전 질문에서 말씀드린대로
트랜잭션을 조정하시고 다시 확인해보십시오.
트랜잭션 처리 결과는 어플리케이션 혹은 DB, 데이터처리 FW에 설정된 트랜잭션 옵션에 따라 여러가지 경우로 나뉩니다.
트랜잭션과 관련해 설정하신 정보들을 살펴보시면서
원인을 찾아보셔야 할 것 같습니다.
감사합니다.
해당 코드는 직접 구현하신 코드 같습니다.
전자정부 표준프레임워크는 코드 내에서 트랜잭션을 직접 관리하지 않고,
스프링 트랜잭션 기능을 이용해서 처리하고 있습니다.
해당 예외는 동일한 세션이 연결된 상태에서 종료되지 않고 이미 시작된 트랜잭션이 있음에도 불구하고,
새로운 트랜잭션을 시작하려고 하는 경우입니다. (ibatis TransactionManager의 begin() 메서드 참조)
기본적으로 하나의 세션당 하나의 트랜잭션을 처리하게 됩니다. (하나의 메서드만 처리한다는 것이 아님, 여러 개의 메서드를 묶어 하나의 트랜잭션으로 구성 가능)
즉 가장 상위에 있는 update 메소드를 호출하면서 생성된 세션에서
2개의 transaction을 생성하셨기 때문에 발생한 문제가 아닐까 합니다.
이전 질문에서 말씀드린대로
트랜잭션을 조정하시고 다시 확인해보십시오.
트랜잭션 처리 결과는 어플리케이션 혹은 DB, 데이터처리 FW에 설정된 트랜잭션 옵션에 따라 여러가지 경우로 나뉩니다.
트랜잭션과 관련해 설정하신 정보들을 살펴보시면서
원인을 찾아보셔야 할 것 같습니다.
감사합니다.