hk2000c技術(shù)專欄

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            111 隨筆 :: 1 文章 :: 28 評(píng)論 :: 0 Trackbacks
          <2007年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊(cè)

          Java Blog

          liferay

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          Spring通過AOP實(shí)現(xiàn)聲明式事務(wù)管理。通常通過TransactionProxyFactoryBean設(shè)置Spring事務(wù)代理。我們需要一個(gè)目標(biāo)對(duì)象包裝在事務(wù)代理中。這個(gè)目標(biāo)對(duì)象一般是一個(gè)普通Java對(duì)象的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>

          <!—spring對(duì)DAO層的事務(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>

          <!—spring對(duì)Service層的代理-->

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

          <!—spring對(duì)DAO層的代理-->

          <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 閱讀(5385) 評(píng)論(0)  編輯  收藏 所屬分類: CMS項(xiàng)目開發(fā)
          主站蜘蛛池模板: 都江堰市| 扎囊县| 钟山县| 阳原县| 瑞金市| 乌海市| 吴堡县| 张家界市| 革吉县| 合山市| 白朗县| 济宁市| 玛沁县| 枣强县| 夏邑县| 武清区| 长泰县| 封开县| 岗巴县| 灵台县| 延吉市| 东海县| 灵川县| 米林县| 永平县| 义马市| 上栗县| 威海市| 新邵县| 休宁县| 介休市| 黔西县| 武夷山市| 满洲里市| 久治县| 休宁县| 余庆县| 囊谦县| 厦门市| 商水县| 神木县|