서로다른 서버에 위치한 이기종데이타베이스에 대한 연결 설정
안녕하세요.
anyframe과 spring 모두 생소하여 작업이 어려움이 많습니다.
고수분들의 많은 도움이 절실합니다.
현재 anyframe과 miplatform으로 개발을 진행중이며,
oracle을 기본으로 사용하여 개발을 진행중에 다른서버에 위치한 sqlserver와의 통신이 필요하여
이부분을 설정해야 하는대 슆지 않네요.
WAS는 JEUS5.0을 사용중이구요. 이곳저곳에 자료를 찾아 설정을 해본결과
1. JEUS에서 XADATASOURCE로 JNDI를 생성하였습니다.
그설정에 대한 구채적인 부분은 다음과 같습니다.
<@database>
<@vendor>mssql<@/vendor>
<@export-name>HANARO<@/export-name>
<@data-source-class-name>com.microsoft.jdbcx.sqlserver.SQLServerDataSource<@/data-source-class-name>
<@data-source-type>ConnectionPoolDataSource<@/data-source-type>
<@data-source-name>com.microsoft.jdbcx.sqlserver.SQLServerDataSource<@/data-source-name>
<@server-name>220.69.XXX<@/server-name>
<@user>hanaro<@/user>
<@password>XXXX<@/password>
<@connection-pool>
<@pooling>
<@min>2<@/min>
<@max>30<@/max>
<@step>4<@/step>
<@period>3600000<@/period>
<@/pooling>
<@/connection-pool>
<@/database>
<@database>
<@vendor>oracle<@/vendor>
<@export-name>testxadatasource<@/export-name>
<@data-source-class-name>oracle.jdbc.xa.client.OracleXADataSource<@/data-source-class-name>
<@data-source-type>XADataSource<@/data-source-type>
<@database-name>ora10g<@/database-name>
<@data-source-name>oracle.jdbc.xa.client.OracleXADataSource<@/data-source-name>
<@port-number>1522<@/port-number>
<@server-name>202.30.XXX<@/server-name>
<@user>yungu<@/user>
<@password>XXXX<@/password>
<@driver-type>thin<@/driver-type>
<@connection-pool>
<@pooling>
<@min>2<@/min>
<@max>30<@/max>
<@step>4<@/step>
<@period>3600000<@/period>
<@/pooling>
<@delegation-datasource>HANARO<@/delegation-datasource>
<@/connection-pool>
<@/database>
네.. 뭐 WAS에서 부팅시 에러는 없더군요.
2. context-datasource.xml 설정을 다음과 같이 하였습니다.
<@?xml version="1.0" encoding="UTF-8"?>
<@beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.anyframejava.org/schema/service http://www.anyframejava.org/schema/service/anyframe-core-service-2.0.xsd">
<@!-- bean id="transactionManagerJTA"
class="org.springframework.transaction.jta.JtaTransactionManager">
<@property name="transactionManagerName"
value="java:/TransactionManager" />
<@property name="jndiTemplate" ref="jnditemplate"><@/property>
<@/bean>
<@tx:advice id="txAdvice" transaction-manager="transactionManagerJTA">
<@tx:attributes>
<@tx:method name="*" rollback-for="Exception" propagation="REQUIRED"/>
<@/tx:attributes>
<@/tx:advice>
<@aop:config>
<@aop:pointcut id="requiredTx"
expression="execution(* kr.knu.yungu..*impl.*(..))"/>
<@aop:advisor advice-ref="txAdvice"
pointcut-ref="requiredTx" />
<@/aop:config>
<@tx:advice id="noTxAdvice" transaction-manager="transactionManagerJTA">
<@tx:attributes>
<@tx:method name="*Tx" rollback-for="Exception" propagation="NOT_SUPPORTED" />
<@/tx:attributes>
<@/tx:advice>
<@aop:config>
<@aop:pointcut id="programTx"
expression="execution(* kr.knu.yungu..*impl.*Tx(..))" />
<@aop:advisor advice-ref="noTxAdvice"
pointcut-ref="programTx" />
<@/aop:config -->
<@bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<@property name="jndiName" value="testxadatasource" />
<@property name="jndiTemplate" ref="jnditemplate" />
<@/bean>
<@bean id="jnditemplate"
class="org.springframework.jndi.JndiTemplate">
<@property name="environment">
<@props>
<@prop key="java.naming.factory.initial">
jeus.jndi.JNSContextFactory
<@/prop>
<@prop key="java.naming.provider.url">
127.0.0.1
<@/prop>
<@/props>
<@/property>
<@/bean>
<@/beans>
역시 부팅시에 에러는 없었습니다.
3. context-query.xml에 다음과 같이 설정하였습니다.
<@?xml version="1.0" encoding="UTF-8"?>
<@beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:config="http://www.anyframejava.org/schema/service"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.anyframejava.org/schema/service http://www.anyframejava.org/schema/service/anyframe-core-service-2.0.xsd">
<@!-- COMMON QUERY -ORACLE10g -->
<@bean id="MIPSQLService"
class="anyframe.core.query.ria.mip.impl.MiPQueryServiceImpl">
<@property name="riaQueryService" ref="riaQueryService" />
<@/bean>
<@bean name="riaQueryService"
class="anyframe.core.query.ria.impl.RiaQueryServiceImpl">
<@property name="jdbcTemplate"
ref="pagingNamedParamJdbcTemplate" />
<@property name="sqlRepository" ref="sqlLoader" />
<@/bean>
<@!-- The original JdbcTemplate definition -->
<@bean id="pagingNamedParamJdbcTemplate"
class="anyframe.core.query.impl.jdbc.PagingNamedParamJdbcTemplate">
<@constructor-arg index="0" ref="pagingJdbcTemplate" />
<@constructor-arg index="1" ref="dataSource" />
<@/bean>
<@bean id="pagingJdbcTemplate"
class="anyframe.core.query.impl.jdbc.PagingJdbcTemplate">
<@constructor-arg ref="dataSource" />
<@property name="exceptionTranslator" ref="exceptionTranslator" />
<@property name="paginationSQLGetter" ref="pagingSQLGenerator" />
<@/bean>
<@bean id="pagingSQLGenerator"
class="anyframe.core.query.impl.jdbc.generator.OraclePagingSQLGenerator" />
<@bean id="exceptionTranslator"
class="anyframe.core.query.impl.util.RawSQLExceptionTranslator" />
<@!-- COMMON QUERY -ORACLE10g -->
<@!-- LOB HANDLE -->
<@bean name="LOBSQLService" class="anyframe.core.query.impl.QueryServiceImpl">
<@property name="jdbcTemplate" ref="oracle_jdbcTemplate"/>
<@property name="sqlRepository" ref="sqlLoader"/>
<@property name="lobHandler" ref="lobHandler"/>
<@/bean>
<@!-- The original JdbcTemplate definition -->
<@bean id="oracle_jdbcTemplate" class="anyframe.core.query.impl.jdbc.PagingJdbcTemplate">
<@property name="dataSource" ref="dataSource" />
<@/bean>
<@!-- NativeJdbcExtractor -->
<@bean id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
lazy-init="true"/>
<@!-- LobHandler for Oracle JDBC drivers -->
<@bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true">
<@property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
<@/bean>
<@!-- LOB HANDLE -->
<@!-- SqlLoader -->
<@bean name="sqlLoader"
class="anyframe.core.query.impl.config.loader.SQLLoader">
<@config:configuration>
<@filename>classpath:query/mapping-*.xml<@/filename>
<@nullcheck type="VARCHAR" default-value="" />
<@sqlload dynamic="false" frequency="5" />
<@skiperror>true<@/skiperror>
<@/config:configuration>
<@/bean>
<@/beans>
4. CLASS 설정
마지막으로는 CLASS에서 TX를 넣은 함수와 그렇지 않은 함수를 구분함으로 해서
서로 다른 연결을 시도하게끔 하였습니다.
최종적으로 테스트 결과 SQLSERVER쪽으로만 연결이 되고있습니다.
선언적인 방법으로 연결을 하고자 하는 이유는 이미 많은 부분이 진행되었기에 전체 CLASS에
대한 변경은 피하고자 함입니다.
현재 CLASS에서는 단순히 함수명만 구분하였는대요. 더 추가하여야만 하는 부분이 있을지요.
이기종 데이타베이스에 대한 연결 방법은 너무 짧거나 찾기가 힘들어 해결이 어렵네요.
혹여 이와관련하여 아시는 분은 도움 말씀 부탁드립니다.
그럼 수고하세요.


해당 이슈 해결을 위해서는 Anyframe Web
해당 이슈 해결을 위해서는 Anyframe Web 포럼에 등록된 이슈(http://www.anyframejava.org/node/847)에 대한 답변을 참조하시기 바랍니다.