posts - 36, comments - 30, trackbacks - 0, articles - 3

          Struts,Spring,Hibernate Web應用開發3

          Posted on 2008-01-02 10:11 笑看人生 閱讀(471) 評論(0)  編輯  收藏 所屬分類: Web開發技術
          在二的基礎上,我們再給這個簡單web應用增加聲明式事務,聲明式事務原來是EJB所引以為自豪的地方,現如今Spring框架的AOP也支持這功能,關于AOP的內容,這兒不想太深入,有興趣的讀者,可以參見本blog上有關Spring AOP方面的介紹,為了增加聲明式事務,我們只需修改Spring的配置文件applicationContext.xml,

          1.首先我們在配置文件中增加事務管理器,由于本應用采用了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使用聲明式事務,我們得用TransactionProxyFactoryBean,它的作用就是把方法包裹在事務中,配置如下:

           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

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

          完整的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.同時還要修改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




          主站蜘蛛池模板: 西畴县| 安仁县| 兰州市| 尖扎县| 普定县| 青冈县| 西和县| 商都县| 八宿县| 乳源| 调兵山市| 错那县| 专栏| 宁海县| 威海市| 卫辉市| 穆棱市| 鄄城县| 岳西县| 交口县| 隆德县| 闽清县| 恭城| 渑池县| 兴海县| 上杭县| 邮箱| 洞口县| 都兰县| 铁岭县| 西充县| 尉犁县| 安吉县| 深圳市| 麻城市| 汨罗市| 南乐县| 靖宇县| 阳原县| 喀喇| 都兰县|