Bonjour,
Je développe actuellement une application J2EE avec Spring et je rencontre un comportement étrange depuis tout récemment.
L'application était originellement en java 1.4 sur un tomcat 4.1 puis nous venons de la basculer en java 1.6/tomcat 6 et c'est depuis que cela se produit.
J'utilise l'injection de dépendance pour instancier mes DAO (une centaine) et les affecter à mes classes de services qui font des contrôles sur les règles de gestion de l'application (une centaine de classe service). Tous ces beans Spring sont déclarés dans une quarantaine de fichiers de contexte lus au démarrage de Tomcat.
Au niveau de la console Tomcat, pas d'erreur apparentes.
Mon problème :
En utilisant l'application, quand j'arrive dans une classe service bien précise, 3 des 4 DAO qu'elle référence sont à "null". D'où une jolie exception dès qu'on y fait appel...
Or ces DAO sont correctement instanciées et référencées dans d'autres services de l'application et sont tout à fait fonctionnelles.
J'ai mis des traces log4j sur la classe service à problème, j'ai découvert que les setXXXDAO() n'étaient même pas appelés sauf 1 (!) au démarrage par Spring.
Encore plus bizarre, mon service est le premier instancié dans mes fichiers de contexte traitant des services, or si je déplace tout le bloc de code ailleurs dans un autre fichier contexte lu plus tard, miracle ça fonctionne !
Voici une idée de mon bean à problème :
Au niveau du démarrage de contexte, le web.xml est tout simple.
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 <!-- Alice --> <bean id="domaineAliceManagerTarget" class="monAppli.service.alice.impl.DomaineAliceManagerImpl"> <property name="domaineAliceDAO"><ref bean="domaineAliceDAO"/></property> <property name="entiteGLDAO"><ref bean="entiteGLDAO"/></property> <property name="genieAliceDAO"><ref bean="genieAliceDAO"/></property> <property name="compteAuxiliaireDAO"><ref bean="compteAuxiliaireDAO"/></property> </bean> <bean id="domaineAliceManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"><ref bean="transactionManager"/></property> <property name="target"><ref local="domaineAliceManagerTarget"/></property> <property name="transactionAttributes"> <props> <prop key="create*">PROPAGATION_REQUIRED</prop> <prop key="delete*">PROPAGATION_REQUIRED</prop> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean>
Si vous avez besoin d'autres éléments, n'hésitez pas à me les demander.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/conf/context*.xml</param-value> </context-param>
J'avoue que ça me laisse perplexe.
Merci d'avance.
Partager