<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      事務的編程模型

      在上一篇文章里面寫了關于事務的一些特性,這里在談談事務的編程模型。什么叫做事務的編程模型,這個問題比較難以回答,其實簡單的一句話,就是我們?nèi)绾稳ナ褂煤涂刂剖聞铡T趈ava平臺里面,有三種事務編程模型:本地事務模型,編程式事務模型,聲明式事務模型(當然我不是太認同這種說法,并不是太準確,不過大體也就這么回事情)

       

      • 本地事務模型

      本地事務模型:不用事務的編程框架來管理事務,直接使用資源管理器來控制事務。典型的就是java.sql.Connection 中的  setAutoCommit、commit、rollback方法,見下面一段代碼,直接使用資源管理器進行事務控制

              Connection conn = getConnection();
              conn.setAutoCommit(false);
              // do something
              boolean success = doSomething();
              if (success) {
                  conn.commit();
              } else {
                  conn.rollback();
              }
          

       

      • 編程式事務模型

      編程式事務模型:就是使用java提供的事務api JTA(Java Transaction API)

      和事務服務提供者(一般是指j2ee容器) 進行事務控制,JTA里面提供了 java.transaction.UserTransaction ,里面定義了下面幾個方法

      begin:開啟一個事務

      commit:提交當前事務

      rollback:回滾當前事務

      setRollbackOnly:把當前事務標記為回滾

      setTransactionTimeout:設置事務的事件,超過這個事件,就拋出異常,回滾事務

      getStatus;

       

      不過JTA只是提供了一個接口,并沒有提供具體的實現(xiàn),而是由j2ee服務器提供商 根據(jù)JTS規(guī)范提供的。下面一段代碼演示了如何使用事務JPA

              InitialContext ctx = new InitialContext();
              UserTransaction ut = (UserTransaction)
          ctx.lookup("javax.transaction.UserTransaction");
              
              ut.begin();
              //do something
              boolean isSuccess = doSomething() ;
              
              if(isSuccess){
                  ut.commit();
              }else{
                  ut.rollback();
              }

      JPA規(guī)范里面定義了事務相關的幾個角色:事務上下文,資源管理器,通信管理器,應用程序,事務管理器,事務服務提供者。其中資源管理器主要就是我們常見的數(shù)據(jù)庫連接和JMS連接,事務上下文這里可以理解為事務的狀態(tài)和屬性信息,應用程序就是使用事務服務的程序,事務服務提供者就是實現(xiàn)了jta規(guī)范的j2ee容器。事務管理器就是應用程序和事務服務提供者的api接口。通信管理器主要是用在分布式事務里面。

      這個是java里面JPA的規(guī)范,但是也有一些編程框架提供了自己的編程事務模型,例如java里最常用的就是spring的事務管理器,下面是spring提供的編程接口:org.springframework.transaction.PlatformTransactionManager,這里面就只有三個方法:

      getTransaction:根據(jù)屬性信息決定是否開啟事務(具體可以看上一篇文章里面的事務特性小結里面的事務傳播屬性)

      commit;提交當前事務

      rollback;回滾當前事務

      我們發(fā)現(xiàn)其實和JPA提供的編程模型很像,就是開啟一個事務,提交還是回滾事務。spring提供的事務編程框架也比較簡單

      ApplicationContext context = getApplicationContext();
              TransactionTemplate transactionTemplate = (TransactionTemplate)context.getBean("TransactionTemplate");
              
              transactionTemplate.execute(new TransactionCallback() {
                  public Object doInTransaction(TransactionStatus status) {
                      boolean isSuccess = doSomething() ;
      
                      if(isSuccess){
                          
                      }else{
                          status.setRollbackOnly();
                      }
                      return isSuccess;
                  }    
              });

       

      • 聲明式編程

      聲明式編程:這種編程模型不采用硬編碼的方式,而是采用在xml里面進行配置的方式或者使用anotation的方式進行。例如srping里面可以通過aop進行實現(xiàn)

      <bean id="accountService"
      class="org.springframework.transaction.interceptor. TransactionProxyFactoryBean">
      <property name="transactionManager" ref="transactionManager"/> 
      <property name="target" ref="accountServiceTarget"/>
      <property name="transactionAttributes">
      <props>?   <prop key="*">PROPAGATION_SUPPORTS</prop>   <prop key="update*">PROPAGATION_REQUIRED </prop> </props> </property>

       

      以上三種編程模型,第一種比較簡單,也只是適合控制單個資源事務,如果涉及到跨資源(比如兩個數(shù)據(jù)庫連接之間)事務控制,就無能為力了,也就是說不能夠提供分布式事務的解決方案, 而JPA提供了分布式事務的解決方案,這一塊以前了解過,后來忘記了,準備在溫習一下,在整理和總結以下。而spring提供的編程事務模型,則是在局部事務和JPA事務的基礎上提供了一層封裝,統(tǒng)一了兩者的編程模型,也就是說spring其實也提供JPA的編程接口,也就是 JtaTransactionManager,只不過具體實現(xiàn) 委托給jta provider而已。所以基本上編程模型這個劃分還是比較模糊的,直接使用spring提供的編程模型即可。

      主站蜘蛛池模板: 中文字幕一区二区三区四区五区| 欧美牲交videossexeso欧美| 自拍偷自拍亚洲精品熟妇人| 综合色一色综合久久网| 国产亚洲精品久久久久秋霞| 亚洲成a人片在线观看中| 人妻互换一二三区激情视频| 人妻一本久道久久综合鬼色 | 亚洲AV日韩精品久久久久| 国产精品1区2区3区在线观看| 国产精品第一页中文字幕| 国产成人一区二区不卡| 最新中文乱码字字幕在线| 久久成人 久久鬼色| 熟女一区| jizz国产免费观看| 国产呻吟久久久久久久92| 狠狠综合久久综合88亚洲| 一个人免费观看WWW在线视频| 成人无码影片精品久久久| 精品亚洲无人区一区二区| 国产综合色产在线精品| 国产一区二区高清不卡| 香蕉乱码成人久久天堂爱| 99久久国产综合精品女图图等你| 国产精品亚洲二区在线播放| 精品综合久久久久久97| 成人亚洲狠狠一二三四区| 亚洲综合精品第一页| 免费A级毛片无码A∨蜜芽试看| 亚洲美女厕所偷拍美女尿尿| 亚洲欧美另类久久久精品播放的| 人妻少妇88久久中文字幕| 中文字幕国产精品二区| 天天拍夜夜添久久精品大| 少妇精品视频一码二码三 | 亚洲国产精品第一区二区| 日本一区二区三区四区黄色| 亚洲成熟女人av在线观看| 国产午夜精品福利视频| 忘忧草日本在线播放www|