原先不带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?

解决方案 »

  1.   

    tomact下的jndi连接问题我已经解决了,现在就剩weblogic下的还不行,tomact的参考一下这篇博文
    参考这篇博文
    http://blog.csdn.net/conquer0715/article/details/50948530
      

  2.   

    <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>