[WebLogic] JDBC 스펙에 의해, AutoCommit 이 실행되는 경우
1. Overview
JDBC 스펙에 의해, AutoCommit 이 실행되는 경우
2. Descriptions
어플리케이션에서 쿼리를 auto commit 하지 않는 상태 = setAutoCommit(false)
위의 경우에,
commit 또는 rollback 실행하지 않고 connection.close()를 호출하면
해당 쿼리는 setAutoCommit(true)를 호출하여, 자동으로 commit 되게 한다.
이것은, JDBC 스펙에 따라 commit 을 보장하기 위함이다.
하지만 몇몇 드라이버(Oracle 10.x, 11.x)에서는 commit이 자동으로 실행되지 않는다.
이러한 동작으로 인해,
commit 또는 rollback 되어야 하는 작업이 다음에 실행되도록 예약된다.
즉 원치 않는 시점에, commit 또는 rollback 된다.
이러한 상황을 방지하기 위해 웹로직 데이터소스는 connection 이 pool에 반환될 때 commit을 호출한다.
setAutoCommit(true) 선언 하거나,
connection.close() 전에 commit 또는 rollback을 항상 정확하게 호출하고 있다면,
system property에 weblogic.datasource.endLocalTxOnNonXaConWithCommit=false
를 적용하여
불필요한 자동 commit 보장을 제거 할 수 있다.
요약: JDBC 스펙에 따라, 자동 commit 을 할 필요 없으므로
weblogic.datasource.endLocalTxOnNonXaConWithCommit=false
옵션을 적용할 필요가 있다.
위는, Non-XA 이며,
XA connection에서는 commit 또는 rollback을 호출하지 않으면
항상 connection.close 될 때 무조건 rolled back 한다.
roll back 대신 commit 되게 하려면 아래 옵션을 추가한다.
weblogic.datasource.endLocalTxOnXaConWithCommit=true
관련 문서 : Doc ID 2129810.1