在前段开发的系统中,使用到了两个不同网域的oracle数据库,需要处理之间的事务,于是选择了spring+hibernate+jotm组合,现粘贴我的配置,看看大家有什么更优的配置或写法,谢谢。
一、环境及框架
Tomcat+spring+hibernate+jotm,还有就是struts、Oracle等
二、需求说明
系统里有2套不同网域的oracle数据库,之间的数据需要进行交互。
三、Dao配置
1、定义jtom Bean
2、定义数据源
3、定义sessionFactory
4、事务管理配置
5、dao的配置
四、注意事项
1、spring已经整合了jotm,如果你使用spring自带的jotm,可能会提示某些类找不到,下载一个最新的jotm包,把lib目录里的所有jar包拷贝到lib目录。
2、如果系统中使用jndi,则原有的jndi服务可能会无效,提示NameNotFoundException异常,此时在src目录下添加一个carol.properties的属性文件,添加如下内容:
一、环境及框架
Tomcat+spring+hibernate+jotm,还有就是struts、Oracle等
二、需求说明
系统里有2套不同网域的oracle数据库,之间的数据需要进行交互。
三、Dao配置
1、定义jtom Bean
xml 代码
- <bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
2、定义数据源
xml 代码
- <bean id="dataSourceA" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
- <property name="dataSource">
- <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
- <property name="transactionManager">
- <ref local="jotm" />
- </property>
- <property name="driverName">
- <value>oracle.jdbc.driver.OracleDriver</value>
- </property>
- <property name="url">
- <value>jdbc:oracle:thin:@192.168.0.10:1521:A</value>
- </property>
- </bean>
- </property>
- <property name="user">
- <value></value>
- </property>
- <property name="password">
- <value> </value>
- </property>
- </bean>
- <bean id="dataSourceB" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown">
- <property name="dataSource">
- <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown">
- <property name="transactionManager">
- <ref local="jotm" />
- </property>
- <property name="driverName">
- <value>oracle.jdbc.driver.OracleDriver</value>
- </property>
- <property name="url">
- <value>jdbc:oracle:thin:@192.168.0.10:1521:B</value>
- </property>
- </bean>
- </property>
- <property name="user">
- <value> </value>
- </property>
- <property name="password">
- <value> </value>
- </property>
- </bean>
3、定义sessionFactory
xml 代码
- <bean id="sessionFactoryA" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref local="dataSourceA" />
- </property>
- <property name="mappingDirectoryLocations">
- <list>
- <value>classpath:/org/testa/hibernate/model/</value>
- </list>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.jdbc.batch_size">50</prop>
- <prop key="hibernate.cache.use_query_cache">true</prop>
- <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
- </props>
- </property>
- <property name="jtaTransactionManager">
- <ref bean="jotm" />
- </property>
- <property name="lobHandler" ref="lobHandler"/>
- </bean>
- <bean id="sessionFactoryB" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="dataSource">
- <ref local="dataSourceB" />
- </property>
- <property name="mappingDirectoryLocations">
- <list>
- <value>classpath:/org/testb/hibernate/model/</value>
- </list>
- </property>
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
- <prop key="hibernate.show_sql">true</prop>
- <prop key="hibernate.jdbc.batch_size">50</prop>
- <prop key="hibernate.cache.use_query_cache">true</prop>
- <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
- </props>
- </property>
- <property name="jtaTransactionManager">
- <ref bean="jotm" />
- </property>
- <property name="lobHandler" ref="lobHandler"/>
- </bean>
xml 代码
- <bean id="myTransactionManager"
- class="org.springframework.transaction.jta.JtaTransactionManager">
- <property name="userTransaction">
- <ref local="jotm" />
- </property>
- </bean>
5、dao的配置
xml 代码
- <bean id="testADaoTarget" class="org.testa.hibernate.dao.impl.TestADAO">
- <property name="sessionFactory">
- <ref bean=" sessionFactoryA "/>
- </property>
- </bean>
- <bean id="testADao" class="org.springframework.aop.framework.ProxyFactoryBean">
- <property name="proxyInterfaces">
- <value>org.testA.hibernate.dao.ITestADAO</value>
- </property>
- <property name="interceptorNames">
- <list>
- <value> testADaoTarget </value>
- </list>
- </property>
- </bean>
- <bean id="testBDaoTarget" class="org.testa.hibernate.dao.impl.TestBDAO">
- <property name="sessionFactory">
- <ref bean=" sessionFactoryB "/>
- </property>
- </bean>
- <bean id="testBDao" class="org.springframework.aop.framework.ProxyFactoryBean">
- <property name="proxyInterfaces">
- <value>org.testA.hibernate.dao.ITestBDAO</value>
- </property>
- <property name="interceptorNames">
- <list>
- <value> testBDaoTarget </value>
- </list>
- </property>
- </bean>
四、注意事项
1、spring已经整合了jotm,如果你使用spring自带的jotm,可能会提示某些类找不到,下载一个最新的jotm包,把lib目录里的所有jar包拷贝到lib目录。
2、如果系统中使用jndi,则原有的jndi服务可能会无效,提示NameNotFoundException异常,此时在src目录下添加一个carol.properties的属性文件,添加如下内容:
xml 代码
- # do not use CAROL JNDI wrapper
- carol.start.jndi=false
- # do not start a name server
- carol.start.ns=false
- # Naming Factory
- carol.jndi.java.naming.factory.url.pkgs=org.apache.naming