Bonjour,

Je développe un intranet avec Hibernate et Spring. J'ai suivit le tuto "Premier projet avec Tapestry5, Spring et Hibernate" (http://baptiste-meurant.developpez.c...ing-hibernate/).
De plus, l'intranet possède une architecture en couche. Hibernate gère la couche DAO en utilisant une transaction. Spring la couche Service et DAO.

Le souci c'est que je ne sais pas si j'utilise la meilleure méthode pour configurer mes bean. Si ma méthode est optimisée ou si je peux optimiser plus.

Voilà mes fichiers de configuration Hibernate :

  1. applicationContextDao.xml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 
<!-- Application context DAO layer -->
 
<beans>
 
	<!-- General -->
	<bean id="utilisateursDao" class="domain.dao.hibernate3.UtilisateursDaoImpl" >
		<description>
			définit un bean utilisateursDao correspondant à une interface et y associe l'implémentation correspondante.
		</description>
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
 
	<bean id="clientsDao" class="domain.dao.hibernate3.ClientsDaoImpl" >
		<description>
			définit un bean clientsDao correspondant à une interface et y associe l'implémentation correspondante.
		</description>
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
 
	<bean id="fournisseursDao" class="domain.dao.hibernate3.FournisseursDaoImpl" >
		<description>
			définit un bean fournisseursDao correspondant à une interface et y associe l'implémentation correspondante.
		</description>
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
 
	<bean id="contactDao" class="domain.dao.hibernate3.ContactDaoImpl" >
		<description>
			définit un bean contactDao correspondant à une interface et y associe l'implémentation correspondante.
		</description>
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>
 
	<!-- sessionFactory -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<description>
			définit la configuration de la session Hibernate et notement le lien vers le fichier de configuration Hibernate,
			ainsi que la stratégie permettant de récupérer les différents objets mappés dans hibernate. 
			Ici il s'agit de la stratégie basée sur les annotations.			 
		</description>
		<property name="configLocation">
			<value>classpath:hibernate.cfg.xml</value>
		</property>
		<property name="configurationClass">
			<value>org.hibernate.cfg.AnnotationConfiguration</value>
		</property>
	</bean>
 
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
 
	<bean id="transactionProxy" abstract="true"	class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<description>
			proxy transactionnel devant le bean. La configuration de la transaction est indiquée par la référence au bean 
			transactionManager.
		</description>
		<property name="transactionManager">
			<ref bean="transactionManager"/>
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="insert*">PROPAGATION_REQUIRED</prop>
				<prop key="update*">PROPAGATION_REQUIRED</prop>
				<prop key="save*">PROPAGATION_REQUIRED</prop>
				<prop key="*">PROPAGATION_REQUIRED, readOnly</prop>
			</props>
		</property>
	</bean>
 
</beans>
  1. applicationContext.xml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 
<beans>
 
	<!-- Utilisateurs -->
	<bean id="utilisateursManagerTarget" class=" service.impl.UtilisateursManagerImpl" >
		<description>
			injection de dépendance avec la propriété utilisateursDao qui fait référence au bean 
			du fichier applicationContextDao.xml.
		</description>
		<property name="utilisateursDao">
			<ref bean="utilisateursDao" />
		</property>
	</bean>
 
	<bean id="utilisateursManager" parent="transactionProxy" >
		<description>
			on indique que la configuration détaillée de la transaction se faira par des annotations au
			niveau de l'interface utilisateursManager
		</description>
		<property name="transactionManager">
			<ref bean="transactionManager"/>	<!-- bean du applicationContextDao.xml -->
		</property>
		<property name="target">
			<ref bean="utilisateursManagerTarget"/>
		</property>
		<property name="transactionAttributeSource">
			<bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
		</property>
	</bean>
 
	<!-- Clients -->
	<bean id="clientsManagerTarget" class=" service.impl.ClientsManagerImpl" >
		<description>
			injection de dépendance avec la propriété clientsDao qui fait référence au bean 
			du fichier applicationContextDao.xml.
		</description>
		<property name="clientsDao">
			<ref bean="clientsDao" />
		</property>
	</bean>
 
	<bean id="clientsManager" parent="transactionProxy" >
		<description>
			on indique que la configuration détaillée de la transaction se faira par des annotations au
			niveau de l'interface clientsManager
		</description>
		<property name="transactionManager">
			<ref bean="transactionManager"/>	<!-- bean du applicationContextDao.xml -->
		</property>
		<property name="target">
			<ref bean="clientsManagerTarget"/>
		</property>
		<property name="transactionAttributeSource">
			<bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
		</property>
	</bean>
 
	<!-- Fournisseurs -->
	<bean id="fournisseursManagerTarget" class=" service.impl.FournisseursManagerImpl" >
		<description>
			injection de dépendance avec la propriété fournisseursDao qui fait référence au bean 
			du fichier applicationContextDao.xml.
		</description>
		<property name="fournisseursDao">
			<ref bean="fournisseursDao" />
		</property>
	</bean>
 
	<bean id="fournisseursManager" parent="transactionProxy" >
		<description>
			on indique que la configuration détaillée de la transaction se faira par des annotations au
			niveau de l'interface fournisseursManager
		</description>
		<property name="transactionManager">
			<ref bean="transactionManager"/>	<!-- bean du applicationContextDao.xml -->
		</property>
		<property name="target">
			<ref bean="fournisseursManagerTarget"/>
		</property>
		<property name="transactionAttributeSource">
			<bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
		</property>
	</bean>
 
	<!-- Contacts -->
	<bean id="contactManagerTarget" class=" service.impl.ContactManagerImpl" >
		<description>
			injection de dépendance avec la propriété contactDao qui fait référence au bean 
			du fichier applicationContextDao.xml.
		</description>
		<property name="contactDao">
			<ref bean="contactDao" />
		</property>
	</bean>
 
	<bean id="contactManager" parent="transactionProxy" >
		<description>
			on indique que la configuration détaillée de la transaction se faira par des annotations au
			niveau de l'interface contactsManager
		</description>
		<property name="transactionManager">
			<ref bean="transactionManager"/>	<!-- bean du applicationContextDao.xml -->
		</property>
		<property name="target">
			<ref bean="contactManagerTarget"/>
		</property>
		<property name="transactionAttributeSource">
			<bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/>
		</property>
	</bean>	
</beans>
En vous remerciant,
Nicolas