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

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

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

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

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

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

    首先,仍然是一個相關(guān)的配置文件,用來設(shè)置相關(guān)的環(huán)境,打開解壓縮后Atomikos根目錄,拷貝jta.properties到classpath中,并修改為如下內(nèi)容
    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類來創(chuàng)建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,而不會出現(xiàn)異常。

    另外在配置文件中定義了Atomikos的事務(wù)管理器,并在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,事務(wù)代理等等....

    仍然使用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. }  


    運(yùn)行test,然后查看數(shù)據(jù)庫狀態(tài),
    然后修改方法參數(shù)使其不違反數(shù)據(jù)庫約束,再運(yùn)行Test觀察數(shù)據(jù)庫 :)。
    posted on 2008-12-23 15:47 一葉笑天 閱讀(4159) 評論(0)  編輯  收藏 所屬分類: 開源技術(shù)
    主站蜘蛛池模板: 成人毛片18女人毛片免费96 | 亚洲偷自拍另类图片二区| 久久天天躁狠狠躁夜夜免费观看| 亚洲精品无码你懂的| 亚洲美日韩Av中文字幕无码久久久妻妇| 一级特黄录像免费播放肥| 18gay台湾男同亚洲男同| 免费无遮挡无码视频网站| 你懂的网址免费国产| 亚洲精品免费网站| 国产亚洲精品无码成人| 成人午夜免费福利视频| 一级日本高清视频免费观看| 亚洲毛片在线免费观看| 亚洲国产中文字幕在线观看| 欧洲一级毛片免费| 国产乱妇高清无乱码免费| 亚洲日本久久久午夜精品| 亚洲成AV人片在线观看无码| 免费看a级黄色片| 曰批全过程免费视频网址| 一区二区三区精品高清视频免费在线播放 | 亚洲人成激情在线播放| 国产亚洲欧洲Aⅴ综合一区 | 亚洲视频在线播放| 可以免费观看一级毛片黄a| 亚洲电影在线免费观看| 久久精品免费大片国产大片| 亚洲色丰满少妇高潮18p| 亚洲国产精久久久久久久| MM131亚洲国产美女久久| 成人超污免费网站在线看| 午夜不卡久久精品无码免费| 免费人成视频在线观看免费| 99999久久久久久亚洲| 亚洲视频中文字幕| 亚洲一区二区三区偷拍女厕| 国产精品无码素人福利免费| 在线观看视频免费完整版| 午夜网站在线观看免费完整高清观看 | 久久免费观看国产精品88av|