Struts,Spring,Hibernate Web應(yīng)用開發(fā)3
Posted on 2008-01-02 10:11 笑看人生 閱讀(477) 評(píng)論(0) 編輯 收藏 所屬分類: Web開發(fā)技術(shù)在二的基礎(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,配置如下:
2.要在Sping使用聲明式事務(wù),我們得用TransactionProxyFactoryBean,它的作用就是把方法包裹在事務(wù)中,配置如下:
下面我們簡(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的配置如下:
3.同時(shí)還要修改action-servlets.xml文件
1.首先我們?cè)谂渲梦募性黾邮聞?wù)管理器,由于本應(yīng)用采用了Hibernate,所以我們采用HibernateTransactionManager,配置如下:
1
<bean id="transactionManager"
2
class="org.springframework.orm.hibernate.HibernateTransactionManager">
3
<property name="sessionFactory">
4
<ref local="sessionFactory"/>
5
</property>
6
</bean>

2

3

4

5

6

2.要在Sping使用聲明式事務(wù),我們得用TransactionProxyFactoryBean,它的作用就是把方法包裹在事務(wù)中,配置如下:
1
<bean id="bookService"
2
class="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*">
12
PROPAGATION_REQUIRED,-OrderException
13
</prop>
14
</props>
15
</property>
16
</bean>
17

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

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"
5
class="test.register.action.RegisterAction">
6
<property name="registerService" ref="registerTarget"/>
7
</bean>
8
</beans>
9

2

3

4

5

6

7

8

9
