운영환경 transaction 설정 관련 문의
- 작성자 :
- 오*광
- 작성일 :
- 2017-06-30 17:18:00
- 조회수 :
- 1,817
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
안녕하십니까 전화로 문의드렸던 아던트컨설팅 오세광 전임입니다.
다름이 아니오라
저희 쪽에서 context-transaction.xml 파일에 설정을
첨부파일과 같이 하였는데
의문점이 있어 문의드립니다.
위와 같이 설정하였을 경우 Insert, Update, Delete를 제외한 Select 메소드를 실행하였을 때
트랜잭션이 아예 걸리지 않는 것인지가 궁금합니다.
이유는 저희가 JBOSS WAS를 사용중이고 Tibero DBMS를 사용중에 있는데
게시판 상세조회 시 Blocking Lock이 발생하여 원인 규명을 하고 있습니다.
제가 찾아본 바로는 Transaction의 Isolation Level이 Read Commited(CS) 단계일 경우
Commit된 커밋 되기 전까지 수정 중인 데이터는 격리되고, 다른 세션들은 같은 데이터에 대해
이전 이미지를 수정하지 못하고, 읽지도 못한다.
라고 알고 있는데 저희쪽 현상이 이런게 아닌가 싶어서 문의드립니다.
그리고 전자정부프레임워크에서 Transaction Isolation 기본 레벨을 어느부분에서 설정하는지
혹시 가이드 같은게 있다면 알려주시면 감사하겠습니다.
마지막으로 [java.sql.Connection] (ajp-/10.175.79.234:8409-17) Error calling Connection.prepareStatement:: java.sql.SQLException: Connection is not associated with a managed connection.org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@7fd5a858
위 에러가 저희 운영환경에서 빈번히 발생하는데
혹시 전자정부프레임워크 설정 관련하여 해결방법이 있는지도 알려주시면 감사하겠습니다.
다소 두서 없지만 답변 기다리겠습니다.
그럼 수고하십시오.
다름이 아니오라
저희 쪽에서 context-transaction.xml 파일에 설정을
첨부파일과 같이 하였는데
의문점이 있어 문의드립니다.
위와 같이 설정하였을 경우 Insert, Update, Delete를 제외한 Select 메소드를 실행하였을 때
트랜잭션이 아예 걸리지 않는 것인지가 궁금합니다.
이유는 저희가 JBOSS WAS를 사용중이고 Tibero DBMS를 사용중에 있는데
게시판 상세조회 시 Blocking Lock이 발생하여 원인 규명을 하고 있습니다.
제가 찾아본 바로는 Transaction의 Isolation Level이 Read Commited(CS) 단계일 경우
Commit된 커밋 되기 전까지 수정 중인 데이터는 격리되고, 다른 세션들은 같은 데이터에 대해
이전 이미지를 수정하지 못하고, 읽지도 못한다.
라고 알고 있는데 저희쪽 현상이 이런게 아닌가 싶어서 문의드립니다.
그리고 전자정부프레임워크에서 Transaction Isolation 기본 레벨을 어느부분에서 설정하는지
혹시 가이드 같은게 있다면 알려주시면 감사하겠습니다.
마지막으로 [java.sql.Connection] (ajp-/10.175.79.234:8409-17) Error calling Connection.prepareStatement:: java.sql.SQLException: Connection is not associated with a managed connection.org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@7fd5a858
위 에러가 저희 운영환경에서 빈번히 발생하는데
혹시 전자정부프레임워크 설정 관련하여 해결방법이 있는지도 알려주시면 감사하겠습니다.
다소 두서 없지만 답변 기다리겠습니다.
그럼 수고하십시오.
A
안녕하세요, 오세광님
표준프레임워크센터입니다.
첨부해주신 설정을 보면 aop:pointcut를 이용하여 실행되어 Catch해야 하는 Method를 지정하고
tx:advice를 통해서 각각에 대한 역할을 정의하고 있습니다.
이렇게 정의하면 프로그램내에서는 별도의 트랜잭션 관련한 사항에 대해서 기술하지 않아도 트랜잭션관리가 됩니다.
Transaction 관리를 위해 <tx:advice> 하위 태그인 <tx:method>에는 상세 속성 정보를 부여할 수 있습니다.
또한 요청하신 Transaction Management에서 사용되는 Isolation 의 레벨에 대해 설명을 드리겠습니다.
ISOLATION_DEFAULT :
개별적인 PlatformTransactionManager를 위한 격리 레벨
ISOLATION_READ_COMMITTED:
이 격리수준을 사용하는 메소드는 commit 되지 않은 데이터를 읽을 수 없다. 쓰기 락은 다른 Transaction에 의해 이미 변경된 데이터는 얻을수 없다. 따라서 조회 중인 commit 되지 않은 데이터는 불가능하다. 대개의 데이터베이스에서의 디폴트로 지원하는 격리 수준이다.
ISOLATION_READ_UNCOMMITTED:
가장 낮은 Transaction 수준이다. 이 격리수준을 사용하는 메소드는 commit 되지 않은 데이터를 읽을 수 있다. 그러나 이 격리수준은 새로운 레코드가 추가되었는지 알수 없다.
ISOLATION_REPEATABLE_READ:
ISOLATION_READ_COMMITED 보다는 다소 조금 더 엄격한 격리 수준이다. 이 격리 수준은 다른 Transaction이 새로운 데이터를 입력했다면, 새롭게 입력된 데이터를 조회할 수 있다는 것을 의미한다.
ISOLATION_SERIALIZABLE:
가장 높은 격리수준이다. 모든 Transaction(조회를 포함하여)은 각 라인이 실행될 때마다 기다려야 하기 때문에 매우 느리다. 이 격리수준을 사용하는 메소드는 데이터 상에 배타적 쓰기를 락을 얻음으로써 Transaction이 종료될 때까지 조회, 수정, 입력 데이터로부터 다른 Transaction의 처리를 막는다. 가장 많은 비용이 들지만 신뢰할만한 격리 수준을 제공하는 것이 가능하다.
마지막으로 말씀해주신 부분에 대해서는 여러가지 에러가 보여 바로 파악하긴 어렵지만,
Error calling Connection.prepareStatement 에 대해서는 자동재연결 옵션을 확인해주시기 바랍니다.
그 외에 다른 에러도 보이는 것으로 보아 관련 에러에 대한 설정도 점검 해주셔야할거 같습니다.
감사합니다.
표준프레임워크센터입니다.
첨부해주신 설정을 보면 aop:pointcut를 이용하여 실행되어 Catch해야 하는 Method를 지정하고
tx:advice를 통해서 각각에 대한 역할을 정의하고 있습니다.
이렇게 정의하면 프로그램내에서는 별도의 트랜잭션 관련한 사항에 대해서 기술하지 않아도 트랜잭션관리가 됩니다.
Transaction 관리를 위해 <tx:advice> 하위 태그인 <tx:method>에는 상세 속성 정보를 부여할 수 있습니다.
또한 요청하신 Transaction Management에서 사용되는 Isolation 의 레벨에 대해 설명을 드리겠습니다.
ISOLATION_DEFAULT :
개별적인 PlatformTransactionManager를 위한 격리 레벨
ISOLATION_READ_COMMITTED:
이 격리수준을 사용하는 메소드는 commit 되지 않은 데이터를 읽을 수 없다. 쓰기 락은 다른 Transaction에 의해 이미 변경된 데이터는 얻을수 없다. 따라서 조회 중인 commit 되지 않은 데이터는 불가능하다. 대개의 데이터베이스에서의 디폴트로 지원하는 격리 수준이다.
ISOLATION_READ_UNCOMMITTED:
가장 낮은 Transaction 수준이다. 이 격리수준을 사용하는 메소드는 commit 되지 않은 데이터를 읽을 수 있다. 그러나 이 격리수준은 새로운 레코드가 추가되었는지 알수 없다.
ISOLATION_REPEATABLE_READ:
ISOLATION_READ_COMMITED 보다는 다소 조금 더 엄격한 격리 수준이다. 이 격리 수준은 다른 Transaction이 새로운 데이터를 입력했다면, 새롭게 입력된 데이터를 조회할 수 있다는 것을 의미한다.
ISOLATION_SERIALIZABLE:
가장 높은 격리수준이다. 모든 Transaction(조회를 포함하여)은 각 라인이 실행될 때마다 기다려야 하기 때문에 매우 느리다. 이 격리수준을 사용하는 메소드는 데이터 상에 배타적 쓰기를 락을 얻음으로써 Transaction이 종료될 때까지 조회, 수정, 입력 데이터로부터 다른 Transaction의 처리를 막는다. 가장 많은 비용이 들지만 신뢰할만한 격리 수준을 제공하는 것이 가능하다.
마지막으로 말씀해주신 부분에 대해서는 여러가지 에러가 보여 바로 파악하긴 어렵지만,
Error calling Connection.prepareStatement 에 대해서는 자동재연결 옵션을 확인해주시기 바랍니다.
그 외에 다른 에러도 보이는 것으로 보아 관련 에러에 대한 설정도 점검 해주셔야할거 같습니다.
감사합니다.