本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          隨筆-230  評論-230  文章-8  trackbacks-0
          看完了經(jīng)乾的《TUXEDO系統(tǒng)經(jīng)典》后,覺得tuxedo的事務(wù)處理功能是無比強大,當(dāng)時心里就想如果能用JAVA來實現(xiàn)Tuxedo所有功能,那將是一個無比強大的分布式事務(wù)處理系統(tǒng)。當(dāng)我看到atomikos時,我知我找到自己一心要尋找的事務(wù)處理工具。atomikos目前中文文檔還很少,更沒有完整的中文文檔,本人讀書甚少。沒有能力能她的E文文檔翻譯成中文。今天是學(xué)習(xí)atomikos的第一天,終于把一個簡單的例子做完,現(xiàn)在貼出來與大家共享,接下來俺要好好看她的E文文檔了。applicationContext.xml配置
              <!--Atomikos  JTA 事務(wù) begin-->   
              
          <bean id="dataSource1" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">   
                  
          <property name="uniqueResourceName">   
                      
          <value>mysql/main</value>   
                  
          </property>   
                  
          <property name="xaDataSourceClassName">   
                      
          <!-- 使用Mysql XADataSource(mysql>=5.0, Connector/J>=5.0才可以支持XADatasource)-->   
                      
          <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>   
                  
          </property>   
                  
          <property name="xaDataSourceProperties">   
                      
          <value>URL=jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8;user=root;password=123456</value>   
                  
          </property>   
                  
          <property name="exclusiveConnectionMode">   
                      
          <value>true</value>   
                  
          </property>   
                  
          <property name="connectionPoolSize">   
                      
          <value>3</value>   
                  
          </property>   
                  
          <property name="validatingQuery">   
                      
          <value>SELECT 1</value>   
                  
          </property>   
              
          </bean>       
              
              
          <bean id="dataSource2" class="com.atomikos.jdbc.SimpleDataSourceBean" init-method="init" destroy-method="close">   
                  
          <property name="uniqueResourceName">   
                      
          <value>mysql/secondary</value>   
                  
          </property>   
                  
          <property name="xaDataSourceClassName">   
                      
          <!-- 使用Mysql XADataSource(mysql>=5.0, Connector/J>=5.0才可以支持XADatasource)-->   
                      
          <value>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</value>   
                  
          </property>
                  
          <property name="xaDataSourceProperties">   
                      
          <value>URL=jdbc:mysql://localhost:3306/aotsf?useUnicode=true&amp;characterEncoding=utf-8;user=root;password=123456</value>   
                  
          </property>
                  
          <property name="exclusiveConnectionMode">   
                      
          <value>true</value>   
                  
          </property>
                  
          <property name="connectionPoolSize">   
                      
          <value>3</value>   
                  
          </property>
                  
          <property name="validatingQuery">
                      
          <value>SELECT 1</value>   
                  
          </property>   
              
          </bean>     
              
              
          <bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close">   
                  
          <property name="forceShutdown"><value>true</value></property>   
              
          </bean>
              
                 
              
          <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">   
                  
          <property name="transactionTimeout" value="300"/>    
              
          </bean>
              
          <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">   
                  
          <property name="transactionManager">
                      
          <ref bean="atomikosTransactionManager"/>
                  
          </property>
                  
          <property name="userTransaction">
                      
          <ref bean="atomikosUserTransaction"/>
                  
          </property>
              
          </bean>
              
               
          <bean id="atomikosTransactionProxy"
                    class
          ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
                    abstract
          ="true">
                    
          <property name="transactionManager">
                         
          <ref bean="springTransactionManager" />
                    
          </property>
                    
          <property name="transactionAttributes">
                         
          <props>
                          
          <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
                         
          </props>
                    
          </property>
               
          </bean>
              
              
              
          <bean id="jdbcBookDAO" class="dao.jdbc.BookDAO">
                  
          <property name="dataSource">
                      
          <ref bean="dataSource1"/>
                  
          </property>
              
          </bean>
              
              
          <bean id="jdbcTestDAO" class="dao.jdbc.TestDAO">
                  
          <property name="dataSource">
                      
          <ref bean="dataSource2"/>
                  
          </property>
              
          </bean>
              
              
          <bean id="atomikosJTAServiceDemo" parent="atomikosTransactionProxy">
                  
          <property name="target">
                      
          <bean class="service.AtomikosJTAServiceDemo">
                          
          <property name="jdbcBookDAO">
                              
          <ref bean="jdbcBookDAO"/>
                          
          </property>
                          
          <property name="jdbcTestDAO">
                              
          <ref bean="jdbcTestDAO"/>
                          
          </property>                
                      
          </bean>
                  
          </property>
              
          </bean>
              
              
              
          <!--Atomikos  JTA 事務(wù) end  -->

          DAO層代碼
          package dao.jdbc;

          import org.springframework.jdbc.core.JdbcTemplate;
          import org.springframework.jdbc.core.support.JdbcDaoSupport;

          import domain.Book;

          public class BookDAO extends JdbcDaoSupport{
              
          public void addBook(Book book){
                  
          try{
                      JdbcTemplate jt
          =getJdbcTemplate();
                      String str_sql
          ="insert into Book(isbn,bookname,author,note)VALUES(?,?,?,?)";
                      String[] args
          ={book.getIsbn(),book.getBookname(),book.getAuthor(),book.getNote()};
                      jt.update(str_sql, args);
                  }
          catch(RuntimeException e){
                      System.out.println(
          "添加Book失敗");
                      e.printStackTrace();
                      
          throw e;
                  }
              }
          }

          package dao.jdbc;

          import org.springframework.jdbc.core.JdbcTemplate;
          import org.springframework.jdbc.core.support.JdbcDaoSupport;


          public class TestDAO extends JdbcDaoSupport{
              
              
          public void addBook(Integer id, String email){
                  
          try{
                      JdbcTemplate jt
          =getJdbcTemplate();
                      String str_sql
          ="insert into test(id,email)VALUES(?,?)";
                      Object[] args
          ={id,email};
                      jt.update(str_sql, args);
                  }
          catch(RuntimeException e){
                      System.out.println(
          "添加Test失敗");
                      e.printStackTrace();
                      
          throw e;
                  }
              }
          }

          事層代碼
          package service;

          import dao.jdbc.BookDAO;
          import dao.jdbc.TestDAO;
          import domain.Book;

          public class AtomikosJTAServiceDemo {
              
          private BookDAO jdbcBookDAO;
              
          private TestDAO jdbcTestDAO;
              
              
          public String ok(){
                  System.out.println(
          "開始.");
                  jdbcTestDAO.addBook(Integer.valueOf(
          "2"), "pdw2009  tom.com");
                  
                  Book book
          =new Book();
                  book.setIsbn(
          "ccdada66");
                  book.setAuthor(
          "小東");
                  book.setNote(
          "JTA測試");
                  book.setBookname(
          "Atomikos學(xué)習(xí)");
                  jdbcBookDAO.addBook(book);
                  
                  System.out.println(
          "結(jié)束.");
                  
          return "ok";
              }

              
          public BookDAO getJdbcBookDAO() {
                  
          return jdbcBookDAO;
              }

              
          public void setJdbcBookDAO(BookDAO jdbcBookDAO) {
                  
          this.jdbcBookDAO = jdbcBookDAO;
              }

              
          public TestDAO getJdbcTestDAO() {
                  
          return jdbcTestDAO;
              }

              
          public void setJdbcTestDAO(TestDAO jdbcTestDAO) {
                  
          this.jdbcTestDAO = jdbcTestDAO;
              }
              
              
          }
          測試用例
          package services;


          import static org.junit.Assert.*;

          import org.junit.After;
          import org.junit.AfterClass;
          import org.junit.Before;
          import org.junit.BeforeClass;
          import org.junit.Test;
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;

          import service.AtomikosJTAServiceDemo;

          public class AtomikosJTAServiceDemoTest {
              ApplicationContext acx
          =null;
              AtomikosJTAServiceDemo atomikosJTAServiceDemo
          =null;
              @BeforeClass
              
          public static void setUpBeforeClass() throws Exception {
              }

              @AfterClass
              
          public static void tearDownAfterClass() throws Exception {
              }

              @Before
              
          public void setUp() throws Exception {
                  acx
          =new ClassPathXmlApplicationContext("applicationContext.xml");
                  atomikosJTAServiceDemo
          =(AtomikosJTAServiceDemo) acx.getBean("atomikosJTAServiceDemo");
              }

              @After
              
          public void tearDown() throws Exception {
              }
              
              @Test
              
          public void notnullTest()throws Exception{
                  assertNotNull(atomikosJTAServiceDemo);
              }
              @Test
              
          public void okTest()throws Exception{
                  assertEquals(atomikosJTAServiceDemo.ok(),
          "ok");
                  
              }
          }

          posted on 2008-05-25 15:19 有貓相伴的日子 閱讀(12719) 評論(4)  編輯  收藏 所屬分類: spring

          評論:
          # re: spring+atomikos+JTA完整例子 2008-11-14 11:40 | xnang
          只知道用spring卻不知道底層是如何實現(xiàn)的!!  回復(fù)  更多評論
            
          # re: spring+atomikos+JTA完整例子 2008-11-22 16:58 | pdw2009
          @xnang
          是的,因為沒時間,現(xiàn)在也用不到,所以就不去研究它了  回復(fù)  更多評論
            
          # re: spring+atomikos+JTA完整例子[未登錄] 2009-12-04 14:51 | L
          atomikos 需要些什么包?  回復(fù)  更多評論
            
          # re: spring+atomikos+JTA完整例子 2013-03-22 17:28 | zhaoshijie
          jar包呢 截個圖放上去,跑不起來啊 謝謝了  回復(fù)  更多評論
            
          本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          主站蜘蛛池模板: 石狮市| 鄂尔多斯市| 潍坊市| 横峰县| 诏安县| 大名县| 高陵县| 修水县| 通州区| 湖州市| 尼勒克县| 杭锦后旗| 察哈| 苏州市| 天全县| 永清县| 建德市| 汝城县| 城固县| 连山| 达日县| 庆安县| 满城县| 佳木斯市| 宁都县| 石首市| 远安县| 丰县| 武威市| 德昌县| 泌阳县| 柳林县| 石家庄市| 华坪县| 哈尔滨市| 江安县| 大洼县| 兴安县| 阿克| 辉南县| 麻城市|