DS 소스 관련
- 작성자 :
- 김*현
- 작성일 :
- 2011-05-17 21:53:10
- 조회수 :
- 2,156
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
전자정부프레임워크를 사용하여 프로젝트를 구축했는데 문제가 있어 이렇게 글을 올립니다.
데이터 소스의 경우 WAS를 통해 jni lookup을 하는데 쿼리문이 수행될 때 관련없는 데이터 소스까지 open이 되는 현상이 일어나 성능에 문제가 생깁니다.
관련 내용 첨부하겠습니다.
어떻게 문제를 해결해야할까요?
데이터 소스의 경우 WAS를 통해 jni lookup을 하는데 쿼리문이 수행될 때 관련없는 데이터 소스까지 open이 되는 현상이 일어나 성능에 문제가 생깁니다.
관련 내용 첨부하겠습니다.
어떻게 문제를 해결해야할까요?
A
안녕하세요.. 김성현님..
AOP가 2개 적용되어 있고.. 각각 다른 DataSource를 사용하는 TransactionManager를 사용하시기 때문에..
매 호출마다 AOP가 2개씩 걸리고 있습니다.
그래서.. DataSource도 2개씩 오픈 되는 것이 맞습니다..
(즉, 실제 사용하지 않는 DataSource도 joinpoint에 의해 참조됨)
이 경우는 2-PC와 같은 transaction 처리를 위해 DataSourceTransactionManager를 사용하신 것 같은데..
이 DataSourceTransactionManager는 하나의 DataSource만 사용하기 때문에.. 2PC는 불가능합니다.
이 경우는 JTA API를 지원하는 WAS의 도움이 필요한데..
사용하시는 WAS에 따라 JTA TransactionManager 사용을 참조하시면 되실 것 같습니다.
예를 들어 WebLogic의 경우 다음과 같은 설정으로 지정하시면 됩니다.
<bean id="transactionManagerJTA"
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>
<bean class="org.springframework.jndi.JndiObjectFactoryBean"
id="dataSource">
<property name="jndiName" value="TestDS"/>
<property name="jndiTemplate" ref="jnditemplate"/>
</bean>
JTA TransactionManager에 DataSource가 지정되지 않더라도 동일 WAS상에 등록된 DataSource가 처리됩니다.
그럼.. 즐거운 하루되십시오.
감사합니다
AOP가 2개 적용되어 있고.. 각각 다른 DataSource를 사용하는 TransactionManager를 사용하시기 때문에..
매 호출마다 AOP가 2개씩 걸리고 있습니다.
그래서.. DataSource도 2개씩 오픈 되는 것이 맞습니다..
(즉, 실제 사용하지 않는 DataSource도 joinpoint에 의해 참조됨)
이 경우는 2-PC와 같은 transaction 처리를 위해 DataSourceTransactionManager를 사용하신 것 같은데..
이 DataSourceTransactionManager는 하나의 DataSource만 사용하기 때문에.. 2PC는 불가능합니다.
이 경우는 JTA API를 지원하는 WAS의 도움이 필요한데..
사용하시는 WAS에 따라 JTA TransactionManager 사용을 참조하시면 되실 것 같습니다.
예를 들어 WebLogic의 경우 다음과 같은 설정으로 지정하시면 됩니다.
<bean id="transactionManagerJTA"
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>
<bean class="org.springframework.jndi.JndiObjectFactoryBean"
id="dataSource">
<property name="jndiName" value="TestDS"/>
<property name="jndiTemplate" ref="jnditemplate"/>
</bean>
JTA TransactionManager에 DataSource가 지정되지 않더라도 동일 WAS상에 등록된 DataSource가 처리됩니다.
그럼.. 즐거운 하루되십시오.
감사합니다