Я создаю веб-приложение Clojure Noir для запуска в виде WAR-файла в CloudFoundry.
В моем project.clj есть:
:ring {:handler appname.server/handler}
В server.clj я создаю обработчик с помощью Noir:
(def handler (noir.server/gen-handler {:ns 'appname}))
Я собираю WAR файл с помощью плагина lein ring:
lein ring uberwar
Затем push в CloudFoundry с помощью:
vmc push appname
Обработчик запросов работает нормально, и я могу просматривать URL приложения.
Итак, вопрос в том, как правильно выполнить инициализацию при запуске приложения?
Я могу сделать следующее в server.clj:
(when (System/getenv "VCAP_APPLICATION")
(init-func))
Но с этим есть пара проблем. Во-первых, кажется, что это делает инициализацию в неправильное время (когда код читается/вычисляется, а не при запуске приложения). Во-вторых, протектор специфичен для CloudFoundry, и я уверен, что есть правильный общий WAR способ сделать это.
Я думаю, что это цель метода contextInitialized на ServletContextListener, но как мне подключить его к Noir/ring?