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

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

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

    hk2000c技術專欄

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

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

    Spring通過AOP實現聲明式事務管理。通常通過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層接口實現-->

    <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>

    <!—業務層接口實現,把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層接口實現-->

    <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>

    <!—業務層接口實現,把DAO注入到Service里面-->

    <bean name="companyManageTarget"

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

           <property name="companyDAO">

                  <ref bean="companyDAOProxy" />

           </property>

    </bean>

    <!—spring代理業務層的事務管理-->

    <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層的接口實現CompanyManageImpl里面有個setData方法:按順序執行數據查詢,數據刪除,數據插入數據庫行為,如果哪一步出異常(運行時異常),事務回滾,只有所有行為都沒成功,事務提交。

    posted on 2007-11-01 15:38 hk2000c 閱讀(5393) 評論(0)  編輯  收藏 所屬分類: CMS項目開發
    主站蜘蛛池模板: 免费的全黄一级录像带| 亚洲AⅤ男人的天堂在线观看| 亚洲乱码中文字幕久久孕妇黑人| 久久伊人亚洲AV无码网站| 亚洲中文字幕伊人久久无码| 久久精品九九亚洲精品天堂| 亚洲精品国产福利片| 综合偷自拍亚洲乱中文字幕| 一区二区三区无码视频免费福利 | 性xxxxx免费视频播放 | 麻豆一区二区免费播放网站| 亚洲精品mv在线观看| 国产乱子精品免费视观看片| 亚洲国产成人久久综合野外| 亚洲国产精品一区二区久久| 一本色道久久88—综合亚洲精品 | 亚洲AV蜜桃永久无码精品| 91大神亚洲影视在线| 一个人晚上在线观看的免费视频| 99视频免费播放| 亚洲日本一区二区一本一道 | 亚洲人成网7777777国产| 亚洲AV网一区二区三区| 亚洲午夜激情视频| 免费人成在线观看网站| 亚洲免费二区三区| 久草福利资源网站免费| 亚洲AV无码一区二三区| 爽爽爽爽爽爽爽成人免费观看| 免费a级毛片大学生免费观看| 亚洲美女大bbbbbbbbb| 免费网站看v片在线香蕉| 亚洲AV无码第一区二区三区| 一级毛片免费不卡| 亚洲欧洲国产精品你懂的| 毛片免费观看的视频| 18亚洲男同志videos网站| 免费鲁丝片一级在线观看| 最近免费字幕中文大全| 亚洲欧美自偷自拍另类视| 国产精品1024永久免费视频|