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 閱讀(5388) 評論(0)  編輯  收藏 所屬分類: CMS項目開發
          主站蜘蛛池模板: 区。| 湖州市| 凤台县| 鹤庆县| 灌云县| 崇仁县| 桓仁| 瓦房店市| 乐山市| 抚远县| 汉源县| 大宁县| 龙南县| 玛曲县| 茶陵县| 南涧| 七台河市| 洮南市| 颍上县| 广州市| 章丘市| 唐河县| 丹江口市| 米泉市| 嘉峪关市| 宝鸡市| 招远市| 定襄县| 教育| 蒙自县| 肥城市| 缙云县| 兰西县| 湟中县| 云龙县| 高清| 东宁县| 武宁县| 鲁甸县| 辛集市| 上虞市|