Ordinary hut

          人間一福地,勝似天仙宮
          posts - 61, comments - 50, trackbacks - 0, articles - 1

          關于用spring的JtaTransactionManager,配置分布式事務

          Posted on 2010-01-09 13:22 landor 閱讀(17370) 評論(1)  編輯  收藏 所屬分類: spring
          如果容器支持jta,那么spring配置起來非常簡單,因為spring提供了JtaTransactionManager,在這里面提供了幾乎所有的服務器的jta的jndi名字,比如
          * "java:comp/UserTransaction" for Resin 2.x, Oracle OC4J (Orion), JOnAS (JOTM), BEA WebLogic
          * "java:comp/TransactionManager" for Resin 3.x
          * "java:appserver/TransactionManager" for GlassFish
          * "java:pm/TransactionManager" for Borland Enterprise Server and Sun Application Server (Sun ONE 7 and later)
          * "java:/TransactionManager" for JBoss Application Server

          由于大部分服務器獲取jta的方式都不盡相同,spring還針對不同的服務器提供了不同的jta實現,例如:
          WebLogicJtaTransactionManager
          WebSphereUowTransactionManager
          OC4JJtaTransactionManager

          具體內容參加:
          http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/transaction/jta/JtaTransactionManager.html

          不管是jdbc、hibernate還是ibatis,都可以通過JtaTransactionManager來配置分布式事務
          下面簡單貼出部分配置代碼:
          hibernate:
          <beans>
            
          <jee:jndi-lookup id="myDataSource1" jndi-name="dsjndi1" />
            
          <jee:jndi-lookup id="myDataSource2" jndi-name="dsjndi2" />

            
          <bean id="mySessionFactory1"
                  class
          ="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
                  
          <property name="dataSource">
                      
          <ref bean="myDataSource1" />
                  
          </property>
                  
          <property name="hibernateProperties">
                      
          <props>
                          
          <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                          
          <prop key="hibernate.show_sql">true</prop>
                          
          <prop key="hiberante.format_sql">true</prop>
                      
          </props>
                  
          </property> 
                  
          <property name="annotatedClasses">
                      
          <list>
                          
          <value>com.landor.test.entity.User</value>
                      
          </list>
                  
          </property>
                  
          <property name="annotatedPackages">
                      
          <list>
                          
          <value>com.landor.test.entity</value>
                      
          </list>
                  
          </property>
            
          </bean>
            
          <bean id="mySessionFactory2"
                  class
          ="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
                  
          <property name="dataSource">
                      
          <ref bean="myDataSource2" />
                  
          </property>
                  
            
          </bean>

            
          <bean id="myTxManager" class="org.springframework.transaction.jta.JtaTransactionManager"/>
            <!--如果默認id=
          transactionManager,那么可以有下面的標簽,這樣spring會自動尋找相應的jta的jndi并且注入
            <tx:jta-transaction-manager/>-->
            <tx:advice id="txAdvice" transaction-manager="myTxManager">
              
          <tx:attributes>
                  
          <tx:method name="select*" read-only="true" propagation="REQUIRED"/>
                  
          <tx:method name="find*" read-only="true"  propagation="REQUIRED"/>
                  
          <tx:method name="save*"  propagation="REQUIRED" isolation="REPEATABLE_READ"/>
                  
          <tx:method name="update*"  propagation="REQUIRED" isolation="REPEATABLE_READ"/>
                  
          <tx:method name="add*"  propagation="REQUIRED" isolation="REPEATABLE_READ" />
                  
          <tx:method name="delete*"  propagation="REQUIRED" isolation="REPEATABLE_READ"/>
              
          </tx:attributes>
            
          </tx:advice>

          </beans>
          ibatis:
          ibatis與hibernate是一樣的,只需要將hibernate的sessionFactory部分更換一下
              ......
             
          <bean id="sqlMap1Client"
                  class
          ="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
                  
          <property name="dataSource" ref="myDataSource1" />
                  
          <property name="configLocation" value="xxx/SqlMapConfig.xml" />
              
          </bean>
              
          <bean id="sqlMap2Client"
                  class
          ="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
                  
          <property name="dataSource" ref="OssDS" />
                  
          <property name="configLocation" value="xxx/SqlMapConfig.xml" />
              
          </bean>
              ......



          Feedback

          # re: 關于用spring的JtaTransactionManager,配置分布式事務  回復  更多評論   

          2013-04-19 13:11 by WillsonYang
          我是菜鳥,能不能說得更加詳細點 ,問下是不是這兩個程序要一樣,只是分別部署在不同的服務器上..........完全不使用EJB怎么配置
          主站蜘蛛池模板: 汤原县| 襄城县| 京山县| 手游| 宜昌市| 蒲城县| 尤溪县| 淳化县| 安泽县| 阳谷县| 冕宁县| 花莲县| 武平县| 金寨县| 东阿县| 禹城市| 日照市| 汝城县| 寿光市| 梅河口市| 盐城市| 余干县| 阳泉市| 墨江| 鹤山市| 朝阳县| 锦屏县| 墨竹工卡县| 九江县| 博客| 邵武市| 镇坪县| 漳平市| 田林县| 安平县| 岳西县| 武夷山市| 韩城市| 阿克| 五原县| 兴化市|