<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    hk2000c技術專欄

    技術源于哲學,哲學來源于生活 關心生活,關注健康,關心他人

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      111 隨筆 :: 1 文章 :: 28 評論 :: 0 Trackbacks

    Spring通過AOP實現(xiàn)聲明式事務管理。通常通過TransactionProxyFactoryBean設置Spring事務代理。我們需要一個目標對象包裝在事務代理中。這個目標對象一般是一個普通Java對象的bean。當我們定義TransactionProxyFactoryBean時,必須提供一個相關的 PlatformTransactionManager的引用和事務屬性。 事務屬性含有上面描述的事務定義。

    PlatformTransactionManager

    HibernateTransactionManager需要一個SessionFactory的引用

    JtaTransactionManager

    一.把事務放置在了DAO層:

    <!—hibernateTransactionManager-->

    <bean id="transactionManager"

           class="org.springframework.orm.hibernate3.HibernateTransactionManager">

           <property name="sessionFactory">

                  <ref local="sessionFactory" />

           </property>

    </bean>

    <!—DAO層接口實現(xiàn)-->

    <bean id="companyDAOTarget"

           class="com.vstsoft.querycompany.dao.impl.CompanyDAOImpl">

           <property name="sessionFactory">

                  <ref local="sessionFactory" />

           </property>

    </bean>

    <!—springDAO層的事務代理-->

    <bean id="companyDAOProxy"

           class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

           <property name="transactionManager">

                  <ref bean="transactionManager" />

           </property>

           <property name="target">

                  <ref local="companyDAOTarget" />

           </property>

           <property name="transactionAttributes">

                  <props>

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

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

                  <prop key="find*">

                  PROPAGATION_REQUIRED,readOnly

                  </prop>

                  </props>

           </property>

    </bean>

    <!—業(yè)務層接口實現(xiàn),把DAO注入到Service里面-->

    <bean name="companyManageTarget"

           class="com.vstsoft.querycompany.service.impl.CompanyManageTarget">

           <property name="companyDAO">

                  <ref bean="companyDAOProxy" />

           </property>

    </bean>

    <!—springService層的代理-->

    <bean id="companyManageProxy"

           class="org.springframework.aop.framework.ProxyFactoryBean">

           <property name="proxyInterfaces">

                  <value>com.vstsoft.querycompany.service.CompanyManage</value>

           </property>

           <property name="target">

                  <ref bean="companyManageTarget" />

           </property>

    </bean>

    <!—配置struts訪問,把service層注入到action里面-->

    <bean name="/company"

           class="com.vstsoft.querycompany.web.action.CompanyAction" singleton="false">

           <property name="companyManage">

                  <ref local="companyManageProxy" />

           </property>

    </bean>

    二.把事務放置在了Service層:

    <!—jtaTransactionManager-->

    <bean id="jtaTransactionManager"

           class="org.springframework.transaction.jta.JtaTransactionManager" />

    <!—DAO層接口實現(xiàn)-->

    <bean id="companyDAOTarget"

           class="com.vstsoft.querycompany.dao.impl.CompanyDAOImpl">

           <property name="sessionFactory">

                  <ref local="sessionFactory" />

           </property>

    </bean>

    <!—springDAO層的代理-->

    <bean id="companyDAOProxy"

           class="org.springframework.aop.framework.ProxyFactoryBean">

           <property name="proxyInterfaces">

                  <value>com.vstsoft.querycompany.dao.CompanyDAO</value>

           </property>

           <property name="target">

                  <ref bean="companyDAOTarget" />

           </property>

    </bean>

    <!—業(yè)務層接口實現(xiàn),把DAO注入到Service里面-->

    <bean name="companyManageTarget"

           class="com.vstsoft.querycompany.service.impl.CompanyManageTarget">

           <property name="companyDAO">

                  <ref bean="companyDAOProxy" />

           </property>

    </bean>

    <!—spring代理業(yè)務層的事務管理-->

    <bean id="companyManageProxy"

           class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

           <property name="transactionManager">

                  <ref local="jtaTransactionManager" />

           </property>

           <property name="transactionAttributes">

                  <props>

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

                         <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>

                  </props>

           </property>

           <property name="target">

                  <ref bean="companyManageTarget" />

           </property>

    </bean>

    <!—配置struts訪問,把service層注入到action里面-->

    <bean name="/company"

           class="com.vstsoft.querycompany.web.action.CompanyAction" singleton="false">

           <property name="companyManage">

                  <ref local="companyManageProxy" />

           </property>

    </bean>

    service層的接口實現(xiàn)CompanyManageImpl里面有個setData方法:按順序執(zhí)行數(shù)據(jù)查詢,數(shù)據(jù)刪除,數(shù)據(jù)插入數(shù)據(jù)庫行為,如果哪一步出異常(運行時異常),事務回滾,只有所有行為都沒成功,事務提交。

    posted on 2007-11-01 15:38 hk2000c 閱讀(5380) 評論(0)  編輯  收藏 所屬分類: CMS項目開發(fā)
    主站蜘蛛池模板: 伊人久久综在合线亚洲2019| 国产精品无码免费视频二三区| 国产亚洲精午夜久久久久久| 久久久久亚洲AV无码去区首| 在线看片人成视频免费无遮挡| 亚洲资源最新版在线观看| 色片在线免费观看| 久久精品亚洲AV久久久无码| 57PAO成人国产永久免费视频| 亚洲剧情在线观看| 成人爽A毛片免费看| 亚洲欧美不卡高清在线| 最新69国产成人精品免费视频动漫| 亚洲熟女乱色一区二区三区| 韩国欧洲一级毛片免费| 曰批全过程免费视频观看免费软件| 一本久到久久亚洲综合| 怡红院免费全部视频在线视频| 亚洲αv久久久噜噜噜噜噜| 在线看无码的免费网站| 国产亚洲中文日本不卡二区| 国产成人免费网站在线观看| 日韩成人毛片高清视频免费看| 国产性爱在线观看亚洲黄色一级片| 国产成人无码区免费网站| 亚洲欧洲国产经精品香蕉网| 免费观看理论片毛片| 国产精品免费在线播放| 久久久久亚洲AV无码网站| 我要看WWW免费看插插视频| 无码精品人妻一区二区三区免费| 亚洲国产精品无码AAA片| 精品久久8x国产免费观看| 美女被艹免费视频| 亚洲成av人影院| 免费激情视频网站| 久久国产精品免费视频| 亚洲国产精品无码久久| 亚洲AV无码专区国产乱码电影 | 四虎成人免费网站在线| 9i9精品国产免费久久|