一葉笑天
          雄關漫道真如鐵, 而今邁步從頭越。 從頭越, 蒼山如海, 殘陽如血。
          posts - 73,comments - 7,trackbacks - 0
          原文地址:http://tom-duan.javaeye.com/blog/147599

          Atomikos,是一個基于Java的開源事務管理器,提供了事務管理和連接池,不需要應用服務器支持,支持JDBC和JMS事務,能提供對Spring,Hibernate的集成,有興趣多了解的可以直接參考說明文當,有詳細的介紹和使用說明。

          Atomikos可以到http://www.atomikos.com/products.html#ate下載,最新版本是3.2.0

          首先,仍然是一個相關的配置文件,用來設置相關的環境,打開解壓縮后Atomikos根目錄,拷貝jta.properties到classpath中,并修改為如下內容
          jta.properties
          Java代碼
          1. com.atomikos.icatch.service=com.atomikos.icatch.standalone.UserTransactionServiceFactory   
          2. com.atomikos.icatch.console_file_name = tm.out   
          3. com.atomikos.icatch.log_base_name = tmlog   
          4. com.atomikos.icatch.tm_unique_name = com.atomikos.spring.jdbc.tm   
          5. com.atomikos.icatch.console_log_level = INFO   


          隨后,是Spring上下文配置,建立一個名為ApplicationContext-atomikos.xml的Spring上下文

          ApplicationContext-atomikos.xml
          Java代碼
          1. <?xml version="1.0" encoding="UTF-8"?>   
          2. <beans xmlns="http://www.springframework.org/schema/beans"  
          3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
          4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">   
          5.     <!-- XA Datasource -->   
          6.     <bean id="datasource1" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">      
          7.         <property name="uniqueResourceName">      
          8.             <value>mysql/main</value>      
          9.         </property>      
          10.         <property name="xaDataSourceClassName">      
          11.             <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>      
          12.         </property>      
          13.         <property name="xaDataSourceProperties">      
          14.             <value>URL=jdbc:mysql://localhost:3306/test;user=root;password=admin</value>      
          15.         </property>      
          16.         <property name="exclusiveConnectionMode">      
          17.             <value>true</value>      
          18.         </property>      
          19.         <property name="connectionPoolSize">      
          20.             <value>3</value>      
          21.         </property>      
          22.         <property name="validatingQuery">      
          23.             <value>SELECT 1</value>      
          24.         </property>      
          25.     </bean>   
          26.        
          27.     <bean id="datasource2" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">      
          28.         <property name="uniqueResourceName">      
          29.             <value>mysql/news</value>   
          30.         </property>      
          31.         <property name="xaDataSourceClassName">      
          32.             <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>      
          33.         </property>   
          34.         <property name="xaDataSourceProperties">      
          35.             <value>URL=jdbc:mysql://localhost:3306/test2;user=root;password=admin</value>      
          36.         </property>      
          37.         <property name="exclusiveConnectionMode">      
          38.             <value>true</value>      
          39.         </property>      
          40.         <property name="connectionPoolSize">      
          41.             <value>3</value>      
          42.         </property>      
          43.         <property name="validatingQuery">      
          44.             <value>SELECT 1</value>      
          45.         </property>      
          46.     </bean>   
          47.        
          48.     <bean id="template1" class="org.springframework.jdbc.core.JdbcTemplate">   
          49.         <property name="dataSource" ref="datasource1" />   
          50.     </bean>   
          51.        
          52.     <bean id="template2" class="org.springframework.jdbc.core.JdbcTemplate">   
          53.         <property name="dataSource" ref="datasource2" />   
          54.     </bean>   
          55.            
          56.     <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">   
          57.         <property name="forceShutdown"><value>true</value></property>   
          58.     </bean>   
          59.        
          60.     <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">   
          61.         <property name="transactionTimeout" value="300"/>    
          62.     </bean>   
          63.   
          64.     <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">   
          65.         <property name="transactionManager"><ref bean="atomikosTransactionManager"  /></property>   
          66.         <property name="userTransaction"><ref bean="atomikosUserTransaction"  /></property>   
          67.     </bean>   
          68.        
          69.     <bean id="dao1" class="com.xa.dao.UserDao1">   
          70.         <property name="jdbcTemplate">   
          71.             <ref bean="template1"></ref>   
          72.         </property>   
          73.     </bean>   
          74.        
          75.     <bean id="dao2" class="com.xa.dao.UserDao2">   
          76.         <property name="jdbcTemplate">   
          77.             <ref bean="template2"></ref>   
          78.         </property>   
          79.     </bean>   
          80.     <!-- -->   
          81.     <bean id="userServiceTarget" class="com.xa.service.UserServiceImpl">   
          82.         <property name="dao1" ref="dao1"/>   
          83.         <property name="dao2" ref="dao2"/>   
          84.     </bean>   
          85.        
          86.     <bean id="userTest" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">       
          87.         <property name="transactionManager">   
          88.             <ref bean="springTransactionManager"/>   
          89.         </property>       
          90.         <property name="target">   
          91.             <ref bean="userServiceTarget"/>   
          92.         </property>   
          93.         <property name="transactionAttributes">           
          94.             <props>   
          95.                 <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>               
          96.             </props>   
          97.         </property>   
          98.     </bean>   
          99. </beans>  


          看上下文中的代碼,很大部分和JOTM的相似,atomikos使用com.atomikos.jdbc.SimpleDataSourceBean類來創建datasource bean,這里需要特別注意
          Java代碼
          1. <property name="uniqueResourceName">      
          2.     <value>mysql/main</value>      
          3. </property>    


          Java代碼
          1. <property name="uniqueResourceName">      
          2.     <value>mysql/news</value>   
          3. </property>  

          上面的代碼為每個Datasource配置了一個唯一的名稱,名稱不允許相同,否則將會使用同一個datasource,而不會出現異常。

          另外在配置文件中定義了Atomikos的事務管理器,并在Spring的JtaTransactionManager中引用
          Java代碼
          1. <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">   
          2.         <property name="forceShutdown"><value>true</value></property>   
          3.     </bean>   
          4.        
          5.     <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">   
          6.         <property name="transactionTimeout" value="300"/>    
          7.     </bean>   
          8.   
          9.     <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">   
          10.         <property name="transactionManager"><ref bean="atomikosTransactionManager"  /></property>   
          11.         <property name="userTransaction"><ref bean="atomikosUserTransaction"  /></property>   
          12.     </bean>  


          其它的代碼沒什么特別,和JOTM配置基本相同,JdbcTemplate,DAO,Service,事務代理等等....

          仍然使用TestXa.java,修改成引用ApplicationContext-atomikos.xml的上下文配置
          Java代碼
          1. protected String[] getConfigLocations() {   
          2.     //return new String[] { "classpath:ApplicationContext-jotm.xml" };   
          3.     return new String[] { "classpath:ApplicationContext-atomikos.xml" };   
          4. }  


          運行test,然后查看數據庫狀態,
          然后修改方法參數使其不違反數據庫約束,再運行Test觀察數據庫 :)。
          posted on 2008-12-23 15:47 一葉笑天 閱讀(4159) 評論(0)  編輯  收藏 所屬分類: 開源技術
          主站蜘蛛池模板: 洞头县| 汤原县| 南投市| 沂水县| 齐河县| 扎鲁特旗| 望江县| 怀宁县| 信宜市| 广德县| 遵义市| 霍州市| 昌宁县| 英山县| 清远市| 顺义区| 赤峰市| 龙里县| 泾阳县| 宣汉县| 海南省| 剑川县| 嘉峪关市| 工布江达县| 东丰县| 交城县| 合作市| 剑川县| 罗山县| 沈阳市| 策勒县| 青川县| 绩溪县| 彰化市| 开封县| 房产| 潜山县| 绿春县| 兴城市| 宿松县| 宁阳县|