Buduję aplikację internetową Clojure Noir, która działa jako plik WAR w CloudFoundry.Hook inicjujący dla Clojure Noir WAR/Servlet (CloudFoundry)
W moim project.clj mam:
:ring {:handler appname.server/handler}
W server.clj tworzę obsługi przy użyciu Noir:
(def handler (noir.server/gen-handler {:ns 'appname}))
zbudować plik WAR przy użyciu wtyczki pierścień Lein:
lein ring uberwar
Następnie naciśnij do CloudFoundry, używając:
vmc push appname
Obsługa żądań działa dobrze i mogę przejrzeć adres URL aplikacji.
Pytanie brzmi: jaki jest właściwy sposób inicjowania przy uruchamianiu aplikacji?
mogę wykonać następujące czynności w server.clj:
(when (System/getenv "VCAP_APPLICATION")
(init-func))
Ale istnieje kilka problemów z tym. Po pierwsze, wygląda na to, że robi inicjalizację w nieodpowiednim momencie (kiedy kod jest czytany/eval, a nie na początku aplikacji). Po drugie, obrońca jest specyficzny dla CloudFoundry i jestem pewien, że istnieje odpowiednia ogólna metoda WAR, aby to zrobić.
Myślę, że jest to celem metody contextInitialized w ServletContextListener, ale jak mam to podłączyć z Noir/ring?