posts - 40,  comments - 4,  trackbacks - 0
          事務管理的方式:編程式和聲明式,spring推薦使用后一種方式。

          ?事務管理的原理:Aop為普通java類封裝事務控制,它是通過動態代理實現的,spring在這段時間內通過攔截器,加載事務切片。由于Aop的原理是動態加載(回去研究一下proxy動態加載)來進行事務控制的。

          事務管理的步驟(以hibernate為例):

          1.定義一個hibernate適用的事務管理器,將SessionFactory注入進去:

          <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
          ? ?? ?<property name="sessionFactory">
          ? ?? ?? ?<ref bean="sessionFactory"/>
          ? ?? ?</property>
          </bean>
          2.定義事務管理的策略:
          <bean id="transactionAttributeSource" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
          ? ?? ?<property name="properties">
          ? ?? ?? ?<props>
          ? ?? ?? ?? ?<prop key="add">
          ? ?? ?? ?? ?? ?PROPAGATION_REQUIRES_NEW
          ? ?? ?? ?? ?</prop>
          ? ?? ?? ?</props>
          ? ?? ?</property>
          ? ?</bean>
          還可以定義事務隔離程度和回滾
          3.定義一個事務管理器(動態加載來實現的)
          <bean id="studentManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          ? ?? ?<property name="target">
          ? ?? ?? ?<ref bean="studentManager"/>
          ? ?? ?</property>
          ? ?? ?<property name="transactionManager">
          ? ?? ?? ?<ref bean="transactionManager"/>
          ? ?? ?</property>
          ? ?? ?<property name="transactionAttributeSource">
          ? ?? ?? ?<ref bean="transactionAttributeSource"/>
          ? ?? ?</property>
          </bean>

          這個bean的外觀是一個接口(StudentManagerInterface),我們指出了它的具體實現(studentManager),而且為它綁定了事務策略
          附A pring中的所有事務策略

        1. PROPAGATION_REQUIRED--支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
        2. PROPAGATION_SUPPORTS--支持當前事務,如果當前沒有事務,就以非事務方式執行。
        3. PROPAGATION_MANDATORY--支持當前事務,如果當前沒有事務,就拋出異常。
        4. PROPAGATION_REQUIRES_NEW--新建事務,如果當前存在事務,把當前事務掛起。
        5. PROPAGATION_NOT_SUPPORTED--以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
        6. PROPAGATION_NEVER--以非事務方式執行,如果當前存在事務,則拋出異常。


        7. 附B Spring中所有的隔離策略:

          ISOLATION_DEFAULT
          ISOLATION_READ_UNCOMMITED
          ISOLATION_COMMITED
          ISOLATION_REPEATABLE_READ
          ISOLATION_SERIALIZABLE
          AOP應用范圍

          Authentication 權限
          Caching 緩存
          Context passing 內容傳遞
          Error handling 錯誤處理
          Lazy loading 懶加載
          Debugging  調試
          logging, tracing, profiling and monitoring 記錄跟蹤 優化 校準
          Performance optimization 性能優化
          Persistence  持久化
          Resource pooling 資源池
          Synchronization 同步
          Transactions 事務

          典型的hibenrnate事務管理


          <!-- Hibernate SessionFactory -->
          <bean id="sessionFactory“?? class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
          ????????????????<property name="dataSource"><ref local="dataSource" /></property>
          ????????????????<property name="mappingResources">
          ????????????????????????<list><!-- Add list of .hbm.xml files here -->
          ????????????????????????????????<value>org/mzone/model/Tuser.hbm.xml</value>
          ????????????????????????????????<value>org/mzone/model/Article.hbm.xml</value>
          ????????????????????????</list>
          ????????????????</property>
          ????????????????<property name="hibernateProperties">
          ????????????????????????<props>
          ????????????????????????????????<prop ????????key="hibernate.dialect">net.sf.hibernate.dialect.SybaseDialec</prop>
          ????????????????????????????????<prop key="hibernate.show_sql">True</prop>
          ????????????????????????</props>
          ????????????????</property>
          ????????</bean>

          <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
          ????????<bean id="transactionManager"
          ????????????????class="org.springframework.orm.hibernate.HibernateTransactionManager">
          ????????????????<property name="sessionFactory"><ref local="sessionFactory" /></property>
          ????????</bean>????????
          ????????<bean id="baseTxProxy" lazy-init="true" ????????class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          ????????<property name="transactionManager"><ref bean="transactionManager"/></property>
          ?????????? <property name="target">
          ?????????? ????????<ref local=" userManagerTarget " />
          ????????????</property>
          ????????<property name="transactionAttributes">
          ????????????<props>
          ????????????????????????????<prop key="save*">PROPAGATION_REQUIRED</prop>
          ????????????????????????<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
          ????????????????????????<prop key="remove*">PROPAGATION_REQUIRED</prop>
          ????????????????????????<prop key="*">PROPAGATION_REQUIRED</prop>
          ????????????</props>
          ????????</property>
          ????</bean>
          ????<bean id="userManagerTarget" class="org.mzone.service.impl.UserManagerImpl">
          ????????<property name="userDAO"><ref local="userDAO"/></property>
          ????????<property name="articleDao"><ref local="articleDAO"/></property>
          ????</bean>
          userDAO和articleDao是接口
          posted on 2006-11-19 20:16 larryjava 閱讀(163) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 南澳县| 三明市| 揭西县| 临江市| 凤凰县| 汾阳市| 南昌县| 阿瓦提县| 桃源县| 鄂伦春自治旗| 阿合奇县| 临泉县| 常山县| 新余市| 安徽省| 文成县| 中超| 紫阳县| 商洛市| 武定县| 唐河县| 高阳县| 东宁县| 峨眉山市| 当阳市| 樟树市| 德阳市| 慈溪市| 凤凰县| 定西市| 吴川市| 扎囊县| 灌南县| 城固县| 大丰市| 通河县| 万全县| 呼伦贝尔市| 杭州市| 牡丹江市| 思南县|