2012-06-19 15 views
6

Duplicar posible:
How to run an arbitrary startup function in a ring project?ejecutar una función de inicio de la aplicación del anillo/compjure después de desplegar

estoy usando el middleware anillo clojure, con compojure, para construir una API simple. Implemento la aplicación a menudo como una guerra.

Esto funciona muy bien, pero estoy buscando maneras de ejecutar un código de inicialización inicial cuando se inicia la aplicación. Cuando ejecuto "Lein Ring Server" funciona perfectamente; sin embargo, cuando se implementa como una guerra, parece que solo se ejecuta cuando la primera solicitud llega al servidor (es decir, vago). ¿Hay alguna manera de que no sea flojo (sin usar AOT) o existe una forma mejor de conectarlo al ciclo de vida del middleware de anillo?

+0

Canonical Responda aquí: http://stackoverflow.com/questions/13978623/how-to-run-an-arbitrary-startup-function-in-a-ring-project –

Respuesta

2

Creo que está buscando: init param en el complemento lein-ring. Copiada de https://github.com/weavejester/lein-ring:

:init - A function to be called once before your handler starts. It should take no 
arguments. If you've compiled your Ring application into a war-file, this function will 
be called when your handler servlet is first initialized. 
+0

que funciona cuando se ejecuta "Lein Ring Server" y es útil para eso, sin embargo cuando se despliega como una guerra, esa función no se llama en absoluto. –

+1

El truco fue que la función: init en sí no debería * estar * en el proyecto.clj –

1

Un ServletContextListener aplicación serviría a sus necesidades. Si no desea implementar uno usted mismo con :gen-class, puede utilizar las utilidades de servlet en el proyecto ring-java-servlet.

Para ello, cree un archivo con las funciones que quiera exigirse durante el arranque y/o el apagado:

(ns my.project.init 
    (:require [org.lpetit.ring.servlet.util :as util])) 

(defn on-startup [context] 
    (do-stuff (util/context-params context))) 

(defn on-shutdown [context] 
    (do-other-stuff (util/context-params context))) 

a continuación, conectar esto en su aplicación web a través de los web.xml ajustes siguientes:

<context-param> 
    <param-name>context-init</param-name> 
    <param-value>my.project.init/on-startup</param-value> 
</context-param> 
<context-param> 
    <param-name>context-destroy</param-name> 
    <param-value>my.project.init/on-shutdown</param-value> 
</context-param> 
<listener> 
    <listener-class>org.lpetit.ring.servlet.RingServletContextListener</listener-class> 
</listener> 
Cuestiones relacionadas