안녕하세요. 회원님들
개발환경은 Spring MVC 3.1.3, Mybatis 3.2.0, Mybatis-spring 1.2.0 , MySQL 5.5 , Tomcat 7 버전으로 구성되어있습니다.
실질적인 비즈 영역에서 아래니스 로직의 코드가 트랜잭션 처리되는게 목적이었는데.
실행 후 로그 입니다. .. 로그에는 분명 트랜잭션이 적용이 되었다고 판단됩니다.
10:42:04,507 DEBUG http-bio-8080-exec-3 servlet.DispatcherServlet:819 - DispatcherServlet with name 'kspaServlet' processing POST request for [/mgt/logis/goods/regist/insert]
10:42:04,508 DEBUG http-bio-8080-exec-3 annotation.RequestMappingHandlerMapping:209 - Looking up handler method for path /mgt/logis/goods/regist/insert
10:42:04,508 DEBUG http-bio-8080-exec-3 annotation.RequestMappingHandlerMapping:216 - Returning handler method [public org.springframework.web.servlet.ModelAndView com.ttnet.gumzzi.web.mgt.logis.goods.GD_Regist.insert(java.util.Map<java.lang.String, java.lang.String>) throws java.lang.Exception]
10:42:04,508 DEBUG http-bio-8080-exec-3 support.DefaultListableBeanFactory:245 - Returning cached instance of singleton bean 'GD_Regist'
10:42:04,509 INFO http-bio-8080-exec-3 common.CommonInterceptor:50 - Interceptor - preHandle
10:42:04,519 DEBUG http-bio-8080-exec-3 support.DefaultListableBeanFactory:245 - Returning cached instance of singleton bean 'transactionManager'
10:42:04,529 DEBUG http-bio-8080-exec-3 datasource.DataSourceTransactionManager:365 - Creating new transaction with name [com.ttnet.gumzzi.web.mgt.logis.goods.GD_Regist.insert]: PROPAGATION_REQUIRES_NEW,ISOLATION_DEFAULT; ''
10:42:04,531 DEBUG http-bio-8080-exec-3 datasource.DataSourceTransactionManager:204 - Acquired Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@edb787]]] for JDBC transaction
10:42:04,534 DEBUG http-bio-8080-exec-3 datasource.DataSourceUtils:187 - Changing isolation level of JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@edb787]]] to 2
10:42:04,569 DEBUG http-bio-8080-exec-3 spring.SqlSessionUtils:106 - Creating a new SqlSession
10:42:04,584 DEBUG http-bio-8080-exec-3 spring.SqlSessionUtils:122 - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a3d7d0]
====================================
insert
====================================
10:42:04,622 DEBUG http-bio-8080-exec-3 datasource.DataSourceUtils:110 - Fetching JDBC Connection from DataSource
10:42:04,623 DEBUG http-bio-8080-exec-3 log4jdbc.debug:506 - driver name is MySQL-AB JDBC Driver
10:42:04,623 INFO http-bio-8080-exec-3 jdbc.connection:518 - 2. Connection opened org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
10:42:04,623 DEBUG http-bio-8080-exec-3 jdbc.connection:520 - open connections: 2 (1)
10:42:04,623 DEBUG http-bio-8080-exec-3 datasource.DataSourceUtils:114 - Registering transaction synchronization for JDBC Connection
10:42:04,625 DEBUG http-bio-8080-exec-3 transaction.SpringManagedTransaction:85 - JDBC Connection [net.sf.log4jdbc.ConnectionSpy@9eb1b4] will be managed by Spring
10:42:04,626 DEBUG http-bio-8080-exec-3 gd_regist.insert:132 - ooo Using Connection [net.sf.log4jdbc.ConnectionSpy@9eb1b4]
10:42:04,631 DEBUG http-bio-8080-exec-3 gd_regist.insert:132 - ==> Preparing: INSERT INTO test_table ( p_id ,nm ) VALUES ( ? ,? )
10:42:04,673 DEBUG http-bio-8080-exec-3 gd_regist.insert:132 - ==> Parameters: 11(String), 첫번째값(String)
[2013-06-07 10:42:04] - SQL::: INSERT INTO test_table
(
p_id
,nm
)
VALUES
(
'11'
,'첫번째값'
)
10:42:04,687 DEBUG http-bio-8080-exec-3 spring.SqlSessionUtils:165 - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a3d7d0]
10:42:04,688 DEBUG http-bio-8080-exec-3 spring.SqlSessionUtils:99 - Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a3d7d0] from current transaction
====================================
.insert
====================================
10:42:04,688 DEBUG http-bio-8080-exec-3 gd_regist.insert:132 - ooo Using Connection [net.sf.log4jdbc.ConnectionSpy@9eb1b4]
10:42:04,688 DEBUG http-bio-8080-exec-3 gd_regist.insert:132 - ==> Preparing: INSERT INTO test_table ( p_id ,nm ) VALUES ( ? ,? )
10:42:04,689 DEBUG http-bio-8080-exec-3 gd_regist.insert:132 - ==> Parameters: 12(String), 두번째값(String)
[2013-06-07 10:42:04] - SQL::: INSERT INTO test_table
(
p_id
,nm
)
VALUES
(
'12'
,'두번째값'
)
10:42:04,695 DEBUG http-bio-8080-exec-3 spring.SqlSessionUtils:165 - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a3d7d0]
10:42:04,698 DEBUG http-bio-8080-exec-3 datasource.DataSourceTransactionManager:752 - Initiating transaction commit
10:42:04,699 DEBUG http-bio-8080-exec-3 datasource.DataSourceTransactionManager:264 - Committing JDBC transaction on Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@edb787]]]
10:42:04,708 DEBUG http-bio-8080-exec-3 spring.SqlSessionUtils:277 - Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a3d7d0]
10:42:04,710 DEBUG http-bio-8080-exec-3 spring.SqlSessionUtils:298 - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@a3d7d0]
10:42:04,711 DEBUG http-bio-8080-exec-3 datasource.DataSourceUtils:332 - Returning JDBC Connection to DataSource
10:42:04,712 INFO http-bio-8080-exec-3 jdbc.connection:537 - 2. Connection closed org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:333)
10:42:04,712 DEBUG http-bio-8080-exec-3 jdbc.connection:539 - open connections: none
10:42:04,713 DEBUG http-bio-8080-exec-3 datasource.DataSourceUtils:213 - Resetting isolation level of JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@edb787]]] to 4
10:42:04,720 DEBUG http-bio-8080-exec-3 datasource.DataSourceTransactionManager:322 - Releasing JDBC Connection [ProxyConnection[PooledConnection[com.mysql.jdbc.JDBC4Connection@edb787]]] after transaction
10:42:04,720 DEBUG http-bio-8080-exec-3 datasource.DataSourceUtils:332 - Returning JDBC Connection to DataSource
10:42:04,721 INFO http-bio-8080-exec-3 common.CommonInterceptor:60 - Interceptor - postHandle
10:42:04,722 DEBUG http-bio-8080-exec-3 support.DefaultListableBeanFactory:245 - Returning cached instance of singleton bean 'xmlView'
10:42:04,722 DEBUG http-bio-8080-exec-3 servlet.DispatcherServlet:1178 - Rendering view [com.ttnet.gumzzi.common.OutputToXML: name 'xmlView'] in DispatcherServlet with name 'kspaServlet'
10:42:04,723 INFO http-bio-8080-exec-3 common.CommonInterceptor:94 - Interceptor - afterCompletion
10:42:04,723 DEBUG http-bio-8080-exec-3 servlet.DispatcherServlet:913 - Successfully completed request
그런데 실제로 DB 에서 조회를 해보면..
데이터가 안들어갑니다.. 그럼 Commit 이 안됬다는 이야기인가..
DELETE TABLE 로 삭제를 시도해보았는데요. 한참을 있다가. 아래와 같은 에러를 뱉어냅니다.
결국 Tomcat 서비스를 내렸다가 올리면 Lock 이 해제됩니다.
롤백도 위와 마찬가지로 되지 않구요.. JDBC 에서 트랜잭션을 커밋후 종료시키지 않는 문제인거같은데 이건 어디를 봐야하는지 잘 모르겠습니다;;
Tomcat Server XML 에 JNDI 설정으로 DB Connection 사용했구요.
Autocommit 도 기본 false 로 되어있습니다. true 로 설정하면 Lock 이 걸리지 않고 들어가는 족족 데이터가 insert 는 됩니다. Transaction 적용은 안되구요.
아래는 Web.xml 설정입니다. 관련 부분만 보여드리겠습니다.
Servlet-Context.xml 파일내 관련 부분입니다.
Datasource-context.xml 파일내 관련 부분입니다.
회원님들의 많은 조언 부탁드립니다. 이 게시물은 게시 후 모니터링 하겠습니다. 조언해주시면 바로바로 적용해보겠습니다 . 감사합니다!(__)