posts - 36, comments - 30, trackbacks - 0, articles - 3
          在二的基礎(chǔ)上,我們?cè)俳o這個(gè)簡(jiǎn)單web應(yīng)用增加聲明式事務(wù),聲明式事務(wù)原來是EJB所引以為自豪的地方,現(xiàn)如今Spring框架的AOP也支持這功能,關(guān)于AOP的內(nèi)容,這兒不想太深入,有興趣的讀者,可以參見本blog上有關(guān)Spring AOP方面的介紹,為了增加聲明式事務(wù),我們只需修改Spring的配置文件applicationContext.xml,

          1.首先我們?cè)谂渲梦募性黾邮聞?wù)管理器,由于本應(yīng)用采用了Hibernate,所以我們采用HibernateTransactionManager,配置如下:

          1<bean  id="transactionManager" 
          2class="org.springframework.orm.hibernate.HibernateTransactionManager">
          3    <property name="sessionFactory">
          4      <ref local="sessionFactory"/>
          5    </property>
          6 </bean>

          2.要在Sping使用聲明式事務(wù),我們得用TransactionProxyFactoryBean,它的作用就是把方法包裹在事務(wù)中,配置如下:

           1<bean id="bookService" 
           2class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
           3    <property name="transactionManager">
           4      <ref local="transactionManager"/>
           5    </property>
           6    <property name="target">
           7      <ref local=" registerTarget"/>
           8    </property>
           9    <property name="transactionAttributes">
          10      <props>
          11    <prop key="save*">
          12PROPAGATION_REQUIRED,-OrderException 
          13</prop>
          14      </props>
          15    </property>
          16 </bean>
          17

          下面我們簡(jiǎn)單解釋一下上面配置的意思:transactionManager屬性引用一個(gè)事務(wù)管理器,在這里我們引用HibernateTransactionManager,target屬性指定被代理的對(duì)象,transactionAttributes屬性的save*表示在代理對(duì)象中所有以save開頭的方法,PROPAGATION_REQUIRED表示代理對(duì)象中所有以save開頭的方法都必須在事務(wù)中運(yùn)行,-OrderException表示在執(zhí)行以save開頭的方法時(shí),如果有OrderException異常拋出,則事務(wù)立即回滾。

          完整的applicationContext.xml的配置如下:

           1<?xml version="1.0" encoding="UTF-8"?>
           2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
           3 
           4<beans>    
           5 
           6    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
           7       <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
           8       <property name="url" value="jdbc:mysql://localhost/register"/>
           9       <property name="username" value="root"/>
          10       <property name="password" value="root"/>
          11    </bean>    
          12 
          13    <!-- Hibernate SessionFactory -->
          14    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          15       <property name="dataSource" ref="dataSource"/>
          16       <property name="mappingDirectoryLocations">
          17           <value>classpath:test\register\entity\</value>
          18       </property>
          19       <property name="hibernateProperties">
          20           <props>
          21              <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
          22              <prop key="hibernate.show_sql">true</prop>
          23              <prop key="hibernate.generate_statistics">true</prop>
          24           </props>
          25       </property>       
          26    </bean>    
          27    
          28    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
          29    <property name="sessionFactory">
          30      <ref local="sessionFactory"/>
          31    </property>
          32 </bean>
          33 
          34   <bean id="registerService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          35    <property name="transactionManager">
          36      <ref local="transactionManager"/>
          37    </property>
          38    <property name="target">
          39      <ref local=" registerTarget"/>
          40    </property>
          41    <property name="transactionAttributes">
          42      <props>        
          43        <prop key="save*">PROPAGATION_REQUIRED,-OrderException</prop>
          44      </props>
          45    </property>
          46 </bean>
          47 
          48   <bean id="registerDAO" class="test.register.dao.RegisterDAO">
          49        <property name="sessionFactory" ref="sessionFactory"/>       
          50 </bean>
          51 
          52   <bean id="registerTarget" class="test.register.service.RegisterService">
          53        <property name="registerDAO" ref="registerDAO"/>      
          54 </bean> 
          55 
          56</beans>
          57

          3.同時(shí)還要修改action-servlets.xml文件

          1<?xml version="1.0" encoding="UTF-8"?>
          2<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
          3<beans>    
          4    <bean name="/register" 
          5class="test.register.action.RegisterAction">
          6       <property name="registerService" ref="registerTarget"/>     
          7    </bean>     
          8</beans>
          9




          主站蜘蛛池模板: 化德县| 鱼台县| 房山区| 岑溪市| 聂荣县| 中卫市| 通许县| 宜宾市| 龙南县| 当阳市| 洛隆县| 黑水县| 南澳县| 康平县| 兴安盟| 兴化市| 金秀| 彝良县| 武隆县| 邹城市| 克什克腾旗| 永清县| 贵南县| 衡山县| 西乌珠穆沁旗| 稷山县| 凤翔县| 余江县| 合水县| 德惠市| 嘉祥县| 乌恰县| 无锡市| 定安县| 阿巴嘎旗| 十堰市| 黑水县| 合川市| 高州市| 垦利县| 虎林市|