<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一葉笑天
    雄關漫道真如鐵, 而今邁步從頭越。 從頭越, 蒼山如海, 殘陽如血。
    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 一葉笑天 閱讀(4157) 評論(0)  編輯  收藏 所屬分類: 開源技術
    主站蜘蛛池模板: 人妻无码中文字幕免费视频蜜桃 | 亚洲国产精品一区二区三区在线观看 | 美女露隐私全部免费直播| 免费电视剧在线观看| 久久亚洲最大成人网4438| 久久WWW色情成人免费观看| 亚洲一区中文字幕在线观看| 亚洲精品视频在线观看免费| 一级中文字幕免费乱码专区| 亚洲国产专区一区| 亚洲AV日韩综合一区尤物| 欧洲黑大粗无码免费| 亚洲精品欧美综合四区| 亚洲av无码乱码在线观看野外 | 亚洲综合免费视频| 亚洲熟妇无码AV在线播放| 中文字幕乱码系列免费| 亚洲人成网站在线播放影院在线 | 国产一级a毛一级a看免费视频| 国产亚洲人成网站观看| 成人一级免费视频| 亚洲午夜久久久久久噜噜噜| 亚洲欧洲免费视频| 一本色道久久综合亚洲精品蜜桃冫| 毛片a级毛片免费播放100| 男男黄GAY片免费网站WWW| 在线亚洲97se亚洲综合在线| 免费毛片在线看不用播放器| 亚洲无码日韩精品第一页| 亚洲av无码日韩av无码网站冲| 又爽又高潮的BB视频免费看| 97无码人妻福利免费公开在线视频 | 亚洲成a人无码av波多野按摩| 成人国产网站v片免费观看| 亚洲高清专区日韩精品| 无码人妻精品中文字幕免费东京热| 亚洲国产中文字幕在线观看| 日本免费一区二区三区四区五六区 | 24小时免费看片| 国产精品亚洲а∨无码播放麻豆 | 国产99在线|亚洲|