기술지원 문의

closing pool item from active timeout
류이 / 2007-03-06 17:21

레진버전 : 3.0.15 입니다.

 

하나의 트랜잭션으로 묶여져 있는 3개의 테이블(A, B, C)에 데이타를 입력시키는 작업이 있습니다. A,B 테이블에 입력을 하고 C테이블에 입력을 할려고 하는 중 어떤 작업으로 인해여 C테이블에 입력을 하기 전에 데이타 소스 타입아웃에 걸려서 다음과 같은 로그를 남기고 데이타소스를 반환하는 경우가 있습니다.

[17:18:42.655] closing pool item from active timeout:PoolItem[jdbc/oracle,0,com.caucho.sql.ManagedConnectionImpl@1f195fc]

 

그리고, 중간에 있던 작업이 완료되고 C테이블에 입력을 할려고 시도하면, Exception이 발생하면서 C테이블 작업내용은 Rollback이 되지만, 기존의 A.B테이블에 입력된 데이타는 Rollback이 되지 않고, commit이 된 상태입니다.

 

테스트 결과 데이타 소스가 타입아웃에 걸려 반환하면서, 그 순간까지 이루어진 작업은 commit을 수행하는 걸로 밝혀졌습니다.

 

데이타 소스를 반환하면서 이전 작업을 Rollback시킬려면 resin.conf에서 Datasource 생성시 어떤 설정을 해 주어야 하나요?

[답변]closing pool item from active timeout
김성준 / 2007-03-08 09:17


안녕하세요 레진코리아 김성준입니다.

 

문의하신 내용을 바탕으로 추측을 해보면  auto commint설정으로 인하여 마지막에 C table에 insert시 에러 발생이 난후 A,B table 은 commit이 되고 마지막 C table은 Rollback 되는 경우 입니다.


이런 경우에 resin DB Pool 에서는 별다른 설정을 해 줄수 있는게 없습니다. 
그러므로 프로그램상에서 처리해야 하는부분 입니다. 문의 하신 것처럼 error가 발생 했을때 전체적으로 Rollback을 할려면Connection 생성시 autocommit 을 false로 설정하신후 작업이 모두 성공하면 마지막을 commit을 해주는 방법이 있습니다.

 

더 궁금하신 사항이 있으면 언제든지 문의 하여 주시기 바랍니다.

감사합니다.