Domanda

Ho un'applicazione web che carica un contesto Primavera in modo 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>

Purtroppo la mia domanda non è un'applicazione web "pura", nel senso che non ho un front-end reale, ma solo attori Akka remoti che vengono inizializzati tramite un web.xml Listener pure. I miei attori Akka (POJO standard) ha bisogno di entrare in possesso del contesto primavera, quindi la mia domanda è: come faccio a entrare in possesso del contesto primavera da una classe che non ha alcun riferimento al contesto Servlet

In fondo non posso usare:

WebApplicationContextUtils.getWebApplicationContext(ctx);

... perché gli attori Akka non hanno alcun riferimento al ServletContext.

Grazie.

È stato utile?

Soluzione

È possibile creare il proprio Initializer che creerà un'istanza di uno SpringContextActor con un ID ben noto, e quindi gli attori che hanno bisogno di fare qualcosa con la SpringContext può guardare lo SpringContextActor nei messaggi ActorRegistry e inviarlo ad esso.

Altri suggerimenti

  • Se queste POJO sono i fagioli di primavera, si può fare ad attuare ApplicationContextAware

  • È possibile utilizzare @Configurable per fare qualsiasi POJO un fagiolo primavera

  • Se non sono i fagioli di primavera, è possibile memorizzare il ServletContext in JNDI all'avvio, e accedervi tramite JNDI.

mi piacerebbe chiedo su un design che dipendeva così fortemente sul livello Web.

La Primavera linguaggio consigliato è quello di avere un livello di servizio di un'interfaccia POJO che si chiama dal livello Web. Il vantaggio è che lo strato di servizio può essere utilizzato anche se il livello Web viene completamente rimosso.

Se non si dispone di un livello di servizio, magari aggiungendo che ci si darà la possibilità di utilizzarlo senza il web server di livello o app.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top