hk2000c技術(shù)專欄

          技術(shù)源于哲學(xué),哲學(xué)來源于生活 關(guān)心生活,關(guān)注健康,關(guān)心他人

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

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

          PlatformTransactionManager

          HibernateTransactionManager需要一個(gè)SessionFactory的引用

          JtaTransactionManager

          一.把事務(wù)放置在了DAO層:

          <!—hibernateTransactionManager-->

          <bean id="transactionManager"

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

                 <property name="sessionFactory">

                        <ref local="sessionFactory" />

                 </property>

          </bean>

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

          <bean id="companyDAOTarget"

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

                 <property name="sessionFactory">

                        <ref local="sessionFactory" />

                 </property>

          </bean>

          <!—springDAO層的事務(wù)代理-->

          <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è)務(wù)層接口實(shí)現(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>

          二.把事務(wù)放置在了Service層:

          <!—jtaTransactionManager-->

          <bean id="jtaTransactionManager"

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

          <!—DAO層接口實(shí)現(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è)務(wù)層接口實(shí)現(xiàn),把DAO注入到Service里面-->

          <bean name="companyManageTarget"

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

                 <property name="companyDAO">

                        <ref bean="companyDAOProxy" />

                 </property>

          </bean>

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

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

          posted on 2007-11-01 15:38 hk2000c 閱讀(5380) 評論(0)  編輯  收藏 所屬分類: CMS項(xiàng)目開發(fā)
          主站蜘蛛池模板: 左贡县| 察隅县| 阳谷县| 大邑县| 连州市| 浠水县| 达拉特旗| 古丈县| 阳曲县| 翁牛特旗| 梓潼县| 祁阳县| 新安县| 根河市| 绥芬河市| 交城县| 阿拉善盟| 金寨县| 泽州县| 广安市| 石狮市| 健康| 开平市| 浮山县| 龙山县| 海晏县| 滨海县| 天门市| 和田县| 论坛| 高雄县| 余庆县| 聂荣县| 娄底市| 濮阳市| 衡水市| 武强县| 镇安县| 岗巴县| 岳阳市| 阳高县|