Pregunta

Tengo una aplicación web que se carga un contexto de primavera en la forma estándar:

web.xml

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath*:META-INF/applicationContext.xml
        </param-value>
    </context-param>
    <listener>
        <listener-class>
             org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

Por desgracia mi aplicación no es una aplicación web "puro", lo que significa que no tengo una interfaz real, pero sólo actores Akka remotos que éste se inicia a través de un web.xml oyente también. Mis actores Akka (POJOs estándar) tiene que hacerse con el contexto primavera, por lo que mi pregunta es: ¿cómo consigo controlar la primavera contexto de una clase que no tiene ninguna referencia al contexto servlet

Básicamente no puedo usar:

WebApplicationContextUtils.getWebApplicationContext(ctx);

... porque los actores Akka tienen ninguna referencia a la ServletContext.

Gracias.

¿Fue útil?

Solución

Se puede hacer su propio inicializador que va a crear una instancia de un SpringContextActor con una identificación conocida, y luego los actores que necesitan hacer algo con el SpringContext puede mirar el SpringContextActor en los mensajes ActorRegistry y enviar a la misma.

Otros consejos

  • Si estos son los frijoles POJOs primavera, se puede hacer a implementar ApplicationContextAware

  • Puede utilizar @Configurable para hacer cualquier POJO un grano de primavera

  • Si no son granos de primavera, se puede almacenar el ServletContext en JNDI en el arranque, y acceder a ella a través de JNDI.

Me preguntaría sobre un diseño que dependía en gran medida de lo que la capa web.

El idioma recomendada del resorte es tener una capa de interfaz de servicio de POJO que se llama de la capa web. La ventaja es que la capa de servicio se puede utilizar incluso si la capa web se elimina por completo.

Si usted no tiene una capa de servicio, tal vez añadiendo uno le daría la flexibilidad necesaria para utilizarlo sin el servidor de capa web o aplicación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top