Ordinary hut

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

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

          Posted on 2010-01-09 13:22 landor 閱讀(17353) 評論(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怎么配置
          主站蜘蛛池模板: 连平县| 佛教| 岳池县| 腾冲县| 股票| 乌鲁木齐县| 大关县| 嘉定区| 从江县| 蓬莱市| 静宁县| 宜春市| 扶风县| 甘孜| 洞头县| 庐江县| 昌邑市| 文登市| 莲花县| 如东县| 准格尔旗| 新干县| 天气| 嘉义县| 开远市| 罗田县| 青岛市| 若羌县| 安阳县| 泰州市| 贡觉县| 永靖县| 印江| 庐江县| 罗平县| 额济纳旗| 六枝特区| 东阳市| 新泰市| 屏山县| 迭部县|