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

Struts,Spring,Hibernate Web应用开发3

Posted on 2008-01-02 10:11 笑看人生 阅读(454) 评论(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





只有注册用户登录后才能发表评论。


网站导航: