本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          隨筆-230  評論-230  文章-8  trackbacks-0
          Spring把底的事務(wù)管理接口操象出來,形成了一套統(tǒng)一的事務(wù)管理方式,適用JTA和JDBC,Spring 提供了兩種事務(wù)管理方式,和種是編程式事務(wù)另一種是聲明式事務(wù),我不喜歡聲明式事務(wù),所以就不用管它了,編程式事務(wù)有兩種方式實(shí)現(xiàn),一種是使用事務(wù)管理模板,另一種是用PlatformTransactinManage,下面類是我寫的一個(gè)例程,僅供參考的,技術(shù)細(xì)節(jié)需參考相關(guān)文檔
          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事務(wù)模板例子
               *
               
          */
              
          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實(shí)現(xiàn)類管理事務(wù)
               *
               
          */
              
          public void PlatforTransactionManagerDemo(){
                  ApplicationContext ctx
          =new ClassPathXmlApplicationContext("bean.xml"); 
                  PlatformTransactionManager tm
          =(PlatformTransactionManager)ctx.getBean("transactionManager");
                  DefaultTransactionDefinition dtf
          =new DefaultTransactionDefinition();//初始化一個(gè)默認(rèn)事務(wù)
                  dtf.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);//設(shè)置事務(wù)定義對象的事務(wù)傳達(dá)室播屬性
                  TransactionStatus ts=tm.getTransaction(dtf);//TransactionStatus代表事務(wù)對象本身,getTransaction開始一個(gè)事務(wù)
                  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();
              }
              
          }
          對應(yīng)的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時(shí)只能通過applicationContext.xml來初始化容器
          final ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");

          mysql 亂碼問題由來已久,今天發(fā)現(xiàn)把my.ini中的字符編碼改為utf-8時(shí),mysql無法啟動。在這個(gè)例子中我們使用了utf-8編碼,那么我們要把test數(shù)據(jù)庫的編碼,表編碼,字段編碼全改成utf-8就沒問題了,mysql-front停止開發(fā)了,郁悶
          posted on 2007-09-28 23:51 有貓相伴的日子 閱讀(1819) 評論(0)  編輯  收藏 所屬分類: spring
          本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          主站蜘蛛池模板: 保靖县| 泽普县| 磐安县| 郎溪县| 喀喇| 墨竹工卡县| 大埔区| 江西省| 天水市| 松江区| 潞城市| 长沙市| 龙游县| 厦门市| 三都| 磴口县| 射洪县| 淮北市| 眉山市| 德阳市| 府谷县| 民乐县| 纳雍县| 隆子县| 柳州市| 威远县| 阿拉善盟| 旬阳县| 峡江县| 禹城市| 辽宁省| 儋州市| 莒南县| 衡水市| 柘荣县| 邵东县| 万宁市| 衡南县| 上林县| 南澳县| 汝州市|