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):
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:
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)
<bean id="springApplicationContext" class="xxx.SpringApplicationContext"/>
Voici le code de la classe:
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?
Partager