本站不再更新,歡迎光臨 java開發技術網
          隨筆-230  評論-230  文章-8  trackbacks-0
          Spring把底的事務管理接口操象出來,形成了一套統一的事務管理方式,適用JTA和JDBC,Spring 提供了兩種事務管理方式,和種是編程式事務另一種是聲明式事務,我不喜歡聲明式事務,所以就不用管它了,編程式事務有兩種方式實現,一種是使用事務管理模板,另一種是用PlatformTransactinManage,下面類是我寫的一個例程,僅供參考的,技術細節需參考相關文檔
          package com.spring;

          import java.sql.Connection;
          import java.sql.Statement;

          import javax.sql.DataSource;

          import org.springframework.beans.factory.xml.XmlBeanFactory;
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import org.springframework.core.io.ClassPathResource;
          import org.springframework.jdbc.datasource.DataSourceUtils;
          import org.springframework.orm.toplink.TopLinkTransactionManager;
          import org.springframework.transaction.PlatformTransactionManager;
          import org.springframework.transaction.TransactionDefinition;
          import org.springframework.transaction.TransactionStatus;
          import org.springframework.transaction.support.DefaultTransactionDefinition;
          import org.springframework.transaction.support.TransactionCallbackWithoutResult;
          import org.springframework.transaction.support.TransactionTemplate;

          public class TransactionDemo {
              
          /**
               * spring事務模板例子
               *
               
          */
              
          public void templateTemplateDemo(){
                  
          final ApplicationContext ctx=new ClassPathXmlApplicationContext("src/bean.xml"); 
                  
          //ClassPathResource cpr=new ClassPathResource("bean.xml");
                  
          //final XmlBeanFactory factory=new XmlBeanFactory(cpr);
                  PlatformTransactionManager ptm=(PlatformTransactionManager)ctx.getBean("transactionManager");
                  TransactionTemplate tt
          =new TransactionTemplate(ptm);
                  tt.execute(
          new TransactionCallbackWithoutResult(){
                      @Override
                      
          protected void doInTransactionWithoutResult(TransactionStatus ts) {
                          
          try{
                              DataSource ds
          =(DataSource)ctx.getBean("dataSource");
                              Connection conn
          =DataSourceUtils.getConnection(ds);
                              Statement stmt
          =conn.createStatement();
                              stmt.execute(
          "insert into tuser values(123,'裴德萬')");
                              
                          }
          catch(Exception e){
                              ts.setRollbackOnly();
                              e.printStackTrace();
                          }
                      }
                      
                  });
              }
              
          /**
               * 使用PlatforTransactionManager實現類管理事務
               *
               
          */
              
          public void PlatforTransactionManagerDemo(){
                  ApplicationContext ctx
          =new ClassPathXmlApplicationContext("bean.xml"); 
                  PlatformTransactionManager tm
          =(PlatformTransactionManager)ctx.getBean("transactionManager");
                  DefaultTransactionDefinition dtf
          =new DefaultTransactionDefinition();//初始化一個默認事務
                  dtf.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);//設置事務定義對象的事務傳達室播屬性
                  TransactionStatus ts=tm.getTransaction(dtf);//TransactionStatus代表事務對象本身,getTransaction開始一個事務
                  try{
                      DataSource ds
          =(DataSource)ctx.getBean("dataSource");
                      Connection conn
          =DataSourceUtils.getConnection(ds);
                      Statement stmt
          =conn.createStatement();
                      stmt.execute(
          "insert into tuser values(123,'裴德萬')");
                      tm.commit(ts);
                  }
          catch(Exception e){
                      tm.rollback(ts);
                      e.printStackTrace();
                  }
              }
              
          public static void main(String[] args){
                  TransactionDemo td
          =new TransactionDemo();
                  td.templateTemplateDemo();
              }
              
          }
          對應的XML文件配置(jdbc)如下:
              <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
                  
          <property name="driverClassName">
                      
          <value>com.mysql.jdbc.Driver</value>
                  
          </property>
                  
          <property name="url">
                      
          <value>jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8</value>
                  
          </property>
                  
          <property name="username">
                      
          <value>root</value>
                  
          </property>
                  
          <property name="password">
                      
          <value>123456</value>
                  
          </property>
                  
              
          </bean>

          JTA的配置如下
              <bean id="transactionManager" class="org.springframework.jndi.JndiObjectFactoryBean">
              
          <property name="dataSource">
                     
          <property name="jndiName">
                        
          <value>jdbc/kkmei</value>
                     
          </property>
              
          </bean>

          <bean id="jtatm" class="org.springframework.transaction.jta.JtaTransactionManager">
             
          </bean>
          使用ApplicationContext時只能通過applicationContext.xml來初始化容器
          final ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");

          mysql 亂碼問題由來已久,今天發現把my.ini中的字符編碼改為utf-8時,mysql無法啟動。在這個例子中我們使用了utf-8編碼,那么我們要把test數據庫的編碼,表編碼,字段編碼全改成utf-8就沒問題了,mysql-front停止開發了,郁悶
          posted on 2007-09-28 23:51 有貓相伴的日子 閱讀(1819) 評論(0)  編輯  收藏 所屬分類: spring
          本站不再更新,歡迎光臨 java開發技術網
          主站蜘蛛池模板: 屏山县| 洛浦县| 营山县| 墨竹工卡县| 乐清市| 潢川县| 平谷区| 民权县| 宜宾市| 东光县| 界首市| 林州市| 吉隆县| 和田县| 疏附县| 沙雅县| 定边县| 旺苍县| 神农架林区| 教育| 大英县| 遵义市| 荆门市| 建德市| 呼和浩特市| 枞阳县| 河西区| 天等县| 扶余县| 壤塘县| 建昌县| 电白县| 渭南市| 沙洋县| 盐池县| 固阳县| 开阳县| 申扎县| 天水市| 稷山县| 会同县|