spring 用atomikos分布式管理多数据源,怎么通过jndiname引入数据源

cacasala 2015-08-27 02:20:13
原先不带atomikos引入的方式是
<bean id="dataSource_a" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/abc</value>
</property>
</bean>

<bean id="dataSource_b" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/xyz</value>
</property>
</bean>

使用atomikos后看网上一般使用的是jdbc源
<bean id="mysqlDS" class="com.atomikos.jdbc.AtomikosDataSourceBean"
init-method="init" destroy-method="close">
<description>mysql xa datasource</description>
<property name="uniqueResourceName">
<value>mysql_ds</value>
</property>
<property name="xaDataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlXADataSource" />
<property name="xaProperties">
<props>
<prop key="user">userName</prop>
<prop key="password">password</prop>
<prop key="URL">jdbc\:mysql\://127.0.0.1\:3306/dataBaseName?autoReconnect\=true</prop>
</props>
</property>
<!-- 连接池里面连接的个数? -->
<property name="poolSize" value="3"/>
</bean>

但是这边需要直接用jndiname引入,查了下文档,有一种方式是通过xaConnectionFactory
我配成这样试试:
<bean id="dataSource_a" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/abc</value>
</property>
</bean>

<bean id="dataSource_b" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/xyz</value>
</property>
</bean>

<bean id="connectionFactory_a" class="com.atomikos.jms.AtomikosConnectionFactoryBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName">
<value>jdbc/tem</value>
</property>
<property name="xaConnectionFactory">
<ref bean="dataSource_a"/>
</property>
</bean>

<bean id="connectionFactory_b" class="com.atomikos.jms.AtomikosConnectionFactoryBean" init-method="init" destroy-method="close">
<property name="uniqueResourceName">
<value>jdbc/datadb</value>
</property>
<property name="xaConnectionFactory">
<ref bean="dataSource_b"/>
</property>
</bean>

<!-- Mybatis SqlSessionFactory -->
<bean id="sqlSessionFactory_a" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="connectionFactory_a" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>
<bean id="sqlSessionFactory_b" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="connectionFactory_b" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
</bean>

结果当然是悲剧的,datasource源不能转成xaConnectionFactory
有什么方法能在atomikos中使用jndiname方式直接创建datasource或是xaConnectionFactory?
...全文
262 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
NANU-NANA 2017-06-01
  • 打赏
  • 举报
回复
<bean id="dsProps" class="java.util.Properties">
     <constructor-arg>
       <props>
        <prop key="user">root</prop>
        <prop key="password">murali</prop>
        <prop key="DYNAMIC_CLASS">com.findonnet.service.transaction.jboss.jdbc.Mysql</prop>
       </props>
     </constructor-arg>
 </bean>

 <bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName">
   <value>com.arjuna.ats.jdbc.TransactionalDriver</value>
  </property>
  <property name="url" value="jdbc:arjuna:mysql://127.0.0.1:3306/mydb1"/>
  <property name="connectionProperties">
    <ref bean="dsProps"/>
  </property>
 </bean>

 <bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName">
   <value>com.arjuna.ats.jdbc.TransactionalDriver</value>
  </property>
  <property name="url" value="jdbc:arjuna:mysql://127.0.0.1:3306/mydb2"/>
  <property name="connectionProperties">
    <ref bean="dsProps"/>
  </property>
 </bean>

 <bean id="sequenceDAO" class="com.findonnet.persistence.MessageSequenceDAO">
  <property name="dataSource">
   <ref bean="dataSource1"/>
  </property>
 </bean>

 <bean id="sequenceDAO2" class="com.findonnet.persistence.MessageSequenceDAO">
  <property name="dataSource">
   <ref bean="dataSource2"/>
  </property>
 </bean>
shandian803 2017-06-01
  • 打赏
  • 举报
回复
tomact下的jndi连接问题我已经解决了,现在就剩weblogic下的还不行,tomact的参考一下这篇博文 参考这篇博文 http://blog.csdn.net/conquer0715/article/details/50948530

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧