shenang博客技術文檔


          理論不懂就實踐,實踐不會就學理論!

          posts - 35,comments - 55,trackbacks - 0
           

          對于J2EE 應用程序而言,事務的處理一般有兩種模式:

          1 依賴特定事務資源的事務處理

          這是應用開發中最常見的模式, 即通過特定資源提供的事務機制進行事務管理。

          如通過JDBCJTArollbackcommit方法;Hibernate Transaction

          rollbackcommit方法等。這種方法大家已經相當熟悉。

           2 依賴容器的參數化事務管理

          通過容器提供的集約式參數化事務機制,實現事務的外部管理,如EJB中的事

          務管理模式。

           如,下面的EJB事務定義中,將 SessionBean MySession doService

          法定義為Required

          也就是說,當 MySession.doServer 方法被某個線程調用時,容器將此線程

          納入事務管理容器,方法調用過程中如果發生異常,當前事務將被容器自動回

          滾,如果方法正常結束,則容器將自動提交當前事務。

          <container-transaction >

              <method >

                 <ejb-name>MySession</ejb-name>

                 <method-intf>Remote</method-intf>

                 <method-name>doService</method-name>

                 <method-params>

                    <method-param>java.lang.String</method-param>

                 </method-params>

              </method>

              <trans-attribute>Required</trans-attribute>

          </container-transaction>

          容器管理的參數化事務為程序開發提供了相當的靈活性,同時因為將事務委

          托給容器進行管理,應用邏輯中無需再編寫事務代碼,大大節省了代碼量(特

          別是針對需要同時操作多個事務資源的應用) ,從而提高了生產率。

          然而,使用 EJB 事務管理的代價相當高昂,撇開 EJB 容器不菲的價格,EJB

          的學習成本,部署、遷移、維護難度,以及容器本身帶來的性能開銷(這往往

          意味著需要更高的硬件配置)都給我們帶來了相當的困惑。此時事務管理所帶

          來的優勢往往還不能抵消上面這些負面影響。

          配置案例:

          <beans>

           <bean id="dataSource"

             class="org.apache.commons.dbcp.BasicDataSource"

             destroy-method="close">

             <property name="driverClassName">

               <value>org.gjt.mm.mysql.Driver</value>

             </property>

             <property name="url">

               <value>jdbc:mysql://localhost/sample</value>

             </property>

             <property name="username">

               <value>user</value>

             </property>

             <property name="password">

               <value>mypass</value>

             </property>

           </bean>

           <bean id="transactionManager"

          class="org.springframework.jdbc.datasource.DataSourceTr

          ansactionManager">

             <property name="dataSource">

               <ref local="dataSource" />

             </property>

           </bean>

           <bean id="userDAO" class="net.xiaxin.dao.UserDAO">

             <property name="dataSource">

               <ref local="dataSource" />

             </property>

           </bean>   SpringFrameWork Developer’s Guide Version 0.6

          October 8, 2004     So many open source projects. Why not Open your Documents?

           <bean id="userDAOProxy"

           class="org.springframework.transaction.interceptor.Tran

          sactionProxyFactoryBean">

             <property name="transactionManager">

               <ref bean="transactionManager" />

             </property>

             <property name="target">

               <ref local="userDAO" />

             </property>

             <property name="transactionAttributes">

               <props>

                 <prop key="insert*">PROPAGATION_REQUIRED</prop>

                 <prop key="get*">

          PROPAGATION_REQUIRED,readOnly

          </prop>

               </props>

             </property>

           </bean>

          </beans>  

          SpringEJB事務管理比較

          1 Spring可以將任意Java Class 納入事務管理

          這里的UserDAO只是我們編寫的一個普通 Java Class 其中包含了一些

          基本的數據應用邏輯。通過 Spring,我們即可簡單的實現事務的可配置

          化。也就是說,我們可以隨意為某個類的某個方法指定事務管理機制。

          與之對比,如果使用EJB容器提供的事務管理功能,我們不得不按照 EJB

          規范編將UserDAO 進行改造,將其轉換為一個標準的 EJB

          2 Spring事務管理并不依賴特定的事務資源

          EJB 容器必須依賴于 JTA 提供事務支持。而 Spring 的事務管理則支持

          JDBCJTA 等多種事務資源。這為我們提供了更多的選擇,從而也使得

          我們的系統部署更加靈活。

          posted on 2009-03-24 13:24 重慶理工小子 閱讀(1077) 評論(0)  編輯  收藏 所屬分類: Spring2
          主站蜘蛛池模板: 离岛区| 广宗县| 怀安县| 乌鲁木齐市| 沙洋县| 罗山县| 余庆县| 乌兰察布市| 景谷| 揭阳市| 德令哈市| 青铜峡市| 和林格尔县| 建昌县| 奉化市| 丰镇市| 辽阳市| 福海县| 福州市| 花莲县| 醴陵市| 都匀市| 高雄县| 方正县| 图木舒克市| 鹤庆县| 共和县| 康平县| 苏尼特左旗| 禹城市| 昌宁县| 长海县| 迁西县| 浮山县| 新疆| 井研县| 江永县| 恩平市| 韩城市| 邹平县| 二手房|