Bonjour à tous.

Je suis en train de développer une application utilisant Spring 3 et Maven (entre autres).

Jusqu'à présent, l'application était modulée de cette manière:

- model.jar
- dao.jar
- business.jar
- web.war

Le tout dans un .ear

Maintenant, j'ai un web2.war qui va venir s'ajouter et bien entendu, mon but est de pouvoir réutiliser le même Spring application context entre les 2 pour business.jar, dao.jar et model.jar.

Je suis tombé sur cet article sur le blog de Spring: http://blog.springsource.com/2007/06...g-application/

Malheureusement, je n'arrive pas à l'adapter à mon cas.

Voici ce que j'ai fait.

Dans le web.xml de chaque war (web & web2):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/webApplicationContext.xml, classpath:spring/webApplicationSecurity.xml</param-value>
	</context-param>
 
	<context-param>
        <param-name>locatorFactorySelector</param-name>
        <param-value>classpath:spring/beanRefContext.xml</param-value>
    </context-param>
	<context-param>
        <param-name>parentContextKey</param-name>
        <param-value>sharedApplicationContext</param-value>
    </context-param>
Avec donc un webApplicationContext.xml et webApplicationSecurity.xml propre à chaque war.

Et dans beanRefContext.xml placé dans business.jar:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
    <bean id="sharedApplicationContext" class="org.springframework.context.support.ClassPathXmlApplicationContext">
        <constructor-arg>
            <list>
                <value>classpath:spring/jndi-ds.xml</value>
                <value>classpath:spring/businessApplicationContext.xml</value>
            </list>
        </constructor-arg>
    </bean>
Si je compile et déploie le tout, je me retrouve avec un NullPointerException venant d'un bean défini dans un des webApplicationContext.xml (web.war)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<bean id="springApplicationContext" class="xxx.SpringApplicationContext"/>
Voici le code de la classe:

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
public class SpringApplicationContext implements ApplicationContextAware {
 
	private static ApplicationContext CONTEXT;
 
	/**
         * {@inheritDoc}
         */
	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException {
		CONTEXT = applicationContext;
	}
 
	/**
         * 
         * @param beanName the bean name
         * @return an object
         */
	public static Object getBean(String beanName) {
		return CONTEXT.getBean(beanName);
	}
 
}
Object qui implémente simplement l'interface ApplicationContextAware.
L'exception provient vous l'aurez compris du fait que CONTEXT n'est pas setté...

Avez-vous une idée du pourquoi?