Инициализационный хук для Clojure Noir WAR/Servlet (CloudFoundry)

Я создаю веб-приложение 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?

5
задан kanaka 1 February 2012 в 23:51
поделиться