ann
          冰是沒有未來的,因為它的永恒
          posts - 107,comments - 34,trackbacks - 0
             
              傳統上, J2EE開發者有兩種事務管理選擇,全局和本地事務。Spring框架對事務管理的支持極大地改變傳統上認為J2EE應用需要應用服務器。這種改變不單是僅僅為了通過EJB來使用生命式事務而使用應用服務器。事實上,即使你的應用服務器有強大的JTA功能,Spring框架的聲明式事務提供了比EJB CMT(聲明式事務)更強大,更高效的編程模型。一般來說,只有支持多個事務資源,才會需要應用服務器的JTA功能,而大多數應用不需要能夠處理跨多種資源。最重要的一點,使用Spring,你可以選擇何時把你的應用遷移到全功能的應用服務器。使用Spring不需要像以前一樣用編碼實現本地事務代替EJB CMT或JTA,現在只需要改配置問價,而不必改代碼。

          一. Spring事務管理

            1. Spring 編程式事務管理(programmatic transaction management)
               
             DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 
          TransactionStatus status = transactionManager.getTransaction(def);
          try {
          JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
          jdbcTemplate.update("INSERT INTO USER VALUES('Spring008', 'caterpillar', 'M', 29)");
          jdbcTemplate.update("INSERT INTO USER VALUES('Spring009', 'momor', 'F', 26)");
          jdbcTemplate.update("INSERT INTO USER VALUES('Spring010, 'beckyday', 'F', 35)");
          } catch (DataAccessException ex) {
          transactionManager.rollback(status); // 也可以執行status.setRollbackOnly();
          throw ex; 
              }
          transactionManager.commit(status);
          見:http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2398

            2. Spring宣告式事務管理(declarative transaction management)主要是在spring的配置文件中設置
              <bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
          <property name="transactionManager"> <ref bean="transactionManager"/> </property> <property name="target">
          <ref bean="userDAO"/>
          </property>
          <property name="transactionAttributes">
          <props>
          <prop key="insert*">PROPAGATION_REQUIRED</prop>
          </props>
          </property>
          </bean>
          見:http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2402
          二. Spring的@Transcation的例子
          1. class 中
          @Component //注釋就可以將該類定義了 Spring 容器中的 Bean
          public Class UserDaoImpl implements IUserDao {
          @Override
          //標志updateUsers()為Transactional
          @Transactional(
          propagation = Propagation.REQUIRED,
          isolation = Isolation.DEFAULT,
          rollbackFor = Exception.class
          ) public void updateUsers(List<User> users){
          for(User user :users){
          //邏輯
          }
          }
          }
          注意: 事務的屬性和基本概念
          Required : 如果在一個事務中調用,就將該方法加到此事務中,如果沒有啟動事務,就創建新事務
          RequiredNew : 不管當前有沒有事務,都啟動新事務,如果有,會被掛起,直到此方法結束
          NotSupported : 不能在事務中執行此方法,如果有事務,會被掛起,直到此方法結束
          Supports : 如果有當前事務,此方法回加到當前事務,如果沒有,容器不會啟動新事務
          Mandatory : 必須在事務中執行此方法,否則會拋出異常 : TransactionRequiredException
          Never : 必須不在事務中調用此方法,否則拋出RemoteException(遠程調用)或EJBException(本地調用)
                  2.spring配置文件加入:
                     .....................
                      <tx:annotation-driven/>
                    .....................

                注意: webSerivces 是不支持事務的,如果使用事務,必須在下層的Object中實現,例如在Service層或者是Dao層實現。
          另外: 
          http://www.ibm.com/developerworks/cn/java/j-ts1.html
          http://www.javaworld.com.tw/confluence/display/opensrc/Spring
          http://www.redsaga.com/spring_ref/2.0/html/transaction.html#transaction-declarative
          posted on 2009-03-19 16:57 冰是沒有未來的,因為它的永恒 閱讀(4349) 評論(0)  編輯  收藏 所屬分類: java

          當下,把心放下 放下如果是可能的,那一定是在當下,
          不在過去,也不在未來。
          當下放下。唯有活在當下,你的問題才能放下。

          主站蜘蛛池模板: 佳木斯市| 黄大仙区| 涞水县| 自治县| 杭州市| 上杭县| 博爱县| 通河县| 临泉县| 四子王旗| 河北省| 石阡县| 金寨县| 宽城| 大足县| 三河市| 花莲市| 夏津县| 明星| 鹤峰县| 海林市| 宾川县| 乌拉特后旗| 澳门| 陇南市| 宝兴县| 宽城| 商河县| 始兴县| 永登县| 柏乡县| 肇州县| 东宁县| 休宁县| 方正县| 曲沃县| 大洼县| 永年县| 当雄县| 明溪县| 晋州市|