Compartir contexto de Spring entre aplicaciones web

De Dos Ideas.
Saltar a: navegación, buscar

Mediante el “parentContextKey” Spring nos permite compartir el contexto entre WARs contenidos en un EAR.

El uso del parámetro "parentContextKey" le indica al ContextLoader que utilice otra clase "ContextSingletonBeanFactoryLocator" para buscar un bean con el nombre que se especifica en valor del "parentContextKey", el bean debe estar definido en el archivo de configuración cuyo nombre tiene que cumplir con determinado patrón, por defecto el patrón es 'classpath*:beanRefContext.xml'.

EL bean debe ser un ApplicationContext en si mismo, este contexto se convertirá en el contexto de las aplicaciones web. En el caso de que exista el contexto se utilizara el existente y el nuevo no se creara. (Por esto el nombre ContextSingletonBeanFactoryLocator)

Para armar una aplicación de este tipo hay que crear un jar que contenga los servicios a compartir y la declaración de un bean del ApplicationContext en el archivo "beanRefContext.xml", por ultimo hay que incluir el jar en los WARs para dejarlo disponible en el classpath.

Archivo web.xml de los WARs

   <context-param>
       <param-name>parentContextKey</param-name>
       <param-value>ear.context</param-value>
   </context-param>

Archivo beanRefContext.xml de la librería incluida en los WARs

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<!—Este bean es el contexto que compartirán los WARs. En el archivo

  contexto-compartido.xml se tienen que definir todos los beans que 
  se deseen compartir. -->
   <bean id="ear.context" class="org.springframework.context.support.ClassPathXmlApplicationContext">
       <constructor-arg>
           <list>
               <value>contexto-compartido.xml</value>
           </list>
       </constructor-arg>
   </bean>

</beans>