JTA 설정 관련
- 작성자 :
- 박*철
- 작성일 :
- 2013-04-17 10:33:55
- 조회수 :
- 1,604
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
검색해보니 JTA 설정 관련 자료가 많이 있어 참고하여 설정중인데
잘 되질 않아서 문의드립니다.
환경은 weblogic/oracle 기반입니다.
테스트는 전자정부 webproject sample 코드로 진행했습니다.(index.jsp 실행하여 crud 발생)
1. 기본셋인 datasourceID/PASSWORD 방식은 무리없이 잘 진행 됩니다.
(테스트 완료)
2. weblogic에 JNDI를 등록한 이후에 context-datasoure.xml을 첨부파일과
같이 변경했을 경우 무리 없이 진행 잘 됩니다.
(테스트 완료)
3. 실제적으로 context-transaction.xml 에서 JTA 를 트랜잭션 관리를 위해
설정을 첨부파일(context-transaction.xml)과 같이 변경했을 때 에러가 발생합니다.
<bean id="txManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager">
<property name="transactionManagerName" value="javax.transaction.TransactionManager" />
<property name="jndiTemplate" ref="jnditemplate"></property>
</bean>
<bean id="jnditemplate" class="org.springframework.jndi.JndiTemplate" >
<property name="environment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://localhost:7001</prop>
</props>
</property>
</bean>
에러 상황은 게시판 조회시에는 에러가 발생하지 않지만
새로운 게시물을 등록할때 아래와 같은 에러가 발생합니다. (첨부에러 파일 참고)
java.sql.SQLException: Cannot call rollback when using distributed transactions..
참고로 JNDI로 등록한 데이터소스들은 다 XA입니다.
혹시나 해서 context-transaction.xml만 원래 방식대로 변경하면 무리없이 돌아갑니다.
(따라서 context-datasoure.xml JNDI 설정에는 문제가 없는 것으로 판단)
결론적으로 context-transaction.xml weblogic JTA 설정 관련 문제가 있는데 도저히 원인을 찾을 수가 없네요
도움 부탁드립니다.
매번 친절한 답변 감사드립니다.
잘 되질 않아서 문의드립니다.
환경은 weblogic/oracle 기반입니다.
테스트는 전자정부 webproject sample 코드로 진행했습니다.(index.jsp 실행하여 crud 발생)
1. 기본셋인 datasourceID/PASSWORD 방식은 무리없이 잘 진행 됩니다.
(테스트 완료)
2. weblogic에 JNDI를 등록한 이후에 context-datasoure.xml을 첨부파일과
같이 변경했을 경우 무리 없이 진행 잘 됩니다.
(테스트 완료)
3. 실제적으로 context-transaction.xml 에서 JTA 를 트랜잭션 관리를 위해
설정을 첨부파일(context-transaction.xml)과 같이 변경했을 때 에러가 발생합니다.
<bean id="txManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager">
<property name="transactionManagerName" value="javax.transaction.TransactionManager" />
<property name="jndiTemplate" ref="jnditemplate"></property>
</bean>
<bean id="jnditemplate" class="org.springframework.jndi.JndiTemplate" >
<property name="environment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">t3://localhost:7001</prop>
</props>
</property>
</bean>
에러 상황은 게시판 조회시에는 에러가 발생하지 않지만
새로운 게시물을 등록할때 아래와 같은 에러가 발생합니다. (첨부에러 파일 참고)
java.sql.SQLException: Cannot call rollback when using distributed transactions..
참고로 JNDI로 등록한 데이터소스들은 다 XA입니다.
혹시나 해서 context-transaction.xml만 원래 방식대로 변경하면 무리없이 돌아갑니다.
(따라서 context-datasoure.xml JNDI 설정에는 문제가 없는 것으로 판단)
결론적으로 context-transaction.xml weblogic JTA 설정 관련 문제가 있는데 도저히 원인을 찾을 수가 없네요
도움 부탁드립니다.
매번 친절한 답변 감사드립니다.
A
안녕하세요.. 박승철님
설정 하신 것은 맞는 것 같습니다..
다만, 이 경우는 실행환경 서비스 중에 DB 테이블 기반 ID Generation 서비스가 자체적을 db connection을 가지고 처리되는 부분이 있는데.. 명시적인 API 방식으로 transaction를 처리하고 있습니다.
이 부분의 문제로... DataSource를 기존 DBCP와 같은 방식으로 추가로 운영하셔야 할 것 같습니다..
이 부분을 위한 dataSource 지정은 일반적으로 context-idgen.xml 파일에 있습니다.
그럼.. 즐거운 하루되십시오.
감사합니다.
설정 하신 것은 맞는 것 같습니다..
다만, 이 경우는 실행환경 서비스 중에 DB 테이블 기반 ID Generation 서비스가 자체적을 db connection을 가지고 처리되는 부분이 있는데.. 명시적인 API 방식으로 transaction를 처리하고 있습니다.
이 부분의 문제로... DataSource를 기존 DBCP와 같은 방식으로 추가로 운영하셔야 할 것 같습니다..
이 부분을 위한 dataSource 지정은 일반적으로 context-idgen.xml 파일에 있습니다.
그럼.. 즐거운 하루되십시오.
감사합니다.