<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ā)
    主站蜘蛛池模板: 亚洲精品无码Av人在线观看国产| 国产AV无码专区亚洲AVJULIA| 久久亚洲精品成人AV| 九九精品成人免费国产片| 国产亚洲欧洲Aⅴ综合一区| 女人18毛片特级一级免费视频 | JLZZJLZZ亚洲乱熟无码| 色妞www精品视频免费看| 可以免费观看的一级毛片| 麻豆一区二区三区蜜桃免费| 免费一级毛片女人图片| 国产精品自拍亚洲| 亚洲精品国产电影| 精品乱子伦一区二区三区高清免费播放 | 日韩视频在线观看免费| 亚洲成a人片77777kkkk| 久久精品人成免费| 亚洲熟妇成人精品一区| 亚洲国产精品成人一区| 成人片黄网站色大片免费观看APP| 亚洲va中文字幕无码久久不卡| 香蕉免费一区二区三区| 亚洲精品一区二区三区四区乱码 | 亚洲人成网址在线观看| 无码av免费一区二区三区| 亚洲国产成人手机在线电影bd| 成人毛片18岁女人毛片免费看| 久久亚洲AV成人无码国产电影| 国产成人精品久久亚洲高清不卡 | 久久免费视频99| 亚洲综合欧美色五月俺也去| 亚洲AV中文无码乱人伦在线视色| 免费看搞黄视频网站| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 亚洲男人的天堂在线va拉文| 中文字幕在线视频免费观看| 亚洲综合激情九月婷婷| 国产精品无码免费视频二三区| 野花香高清视频在线观看免费| 亚洲久悠悠色悠在线播放| 久久久青草青青国产亚洲免观 |