Question

J'ai une application web qui charge un contexte de printemps de façon standard:

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>

Malheureusement, mon application n'est pas une application web « pure », ce qui signifie que je n'ai pas vraiment la fin de l'avant, mais seulement des acteurs distants qui se Akka initialisés par un web.xml Listener ainsi. Mes acteurs (Akka) de POJO standards doit saisir le contexte du printemps, donc ma question est: comment puis-je mettre la main sur le contexte du printemps d'une classe qui n'a pas de référence au contexte Servlet

En fait, je ne peux pas utiliser:

WebApplicationContextUtils.getWebApplicationContext(ctx);

... parce que les acteurs ont Akka aucune référence au ServletContext.

Merci.

Était-ce utile?

La solution

Vous pouvez faire votre propre Initializer qui permettra de créer une instance d'un SpringContextActor avec un identifiant bien connu, et les acteurs ont besoin de faire quelque chose avec le SpringContext peut regarder la SpringContextActor dans les messages ActorRegistry et envoyer.

Autres conseils

  • Si ces POJO sont les haricots de printemps, vous pouvez les faire mettre en œuvre ApplicationContextAware

  • Vous pouvez utiliser @Configurable pour faire de POJO un grain de printemps

  • Si elles ne sont pas des grains de printemps, vous pouvez stocker les ServletContext dans JNDI au démarrage et l'accès via JNDI.

Je me demande au sujet d'un design qui dépendait si fortement sur le niveau Web.

L'idiome de printemps recommandé est d'avoir une couche de service d'interface POJO qui est appelée à partir du niveau Web. L'avantage est que la couche de service peut être utilisé même si le niveau Web est complètement supprimé.

Si vous ne disposez pas d'une couche de service, en ajoutant peut-être on pourrait vous donner la possibilité de l'utiliser sans le niveau de serveur Web ou application.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top