Clojure and Apache commons daemon
Feb. 25th, 2012 11:03 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Делаю из приложения на clojure сервис для винды, с помощью apache commons daemon.
в главный класс пришлось добавить следующее вуду в (ns):
И методы start и stop со специальным префиксом:
Далее запускаем prunmgr.exe и рулим сервисом, ну или рулим из консоли net start/net stop или sc start /sc stop
Основная дурь оказалась - правильно сигнатуры методов оформить и заставить методы с правильными именами генерится. Хинт типа для массива строк я не нашел, поэтому указал имя типа в лоб.
Осталось разобраться с тремя вещами: откуда оно берет конфиг log4j, как заставить его писать логи в папку доступную сервисюу и почему при стопе сервиса prunsrv.exe валится с исключением.
prunsrv //US//FBRestService --DisplayName="Operden reporting service" --Install=D:\Programm\Clojure\Daemon\prunsrv.exe --Jvm=D:\Programm\Java\jdk1.6.0_25\jre\bin\server\jvm.dll --StartMode=jvm --StopMode=jvm --Classpath=F:\Operden\classes\;F:\Operden\lib\* --StartClass=Operden.main --StartMethod=start --StopClass=Operden.main --StopMethod=stop
в главный класс пришлось добавить следующее вуду в (ns):
(ns ....много (:use).... (:gen-class :name Operden.main :methods [ #^{:static true} [start ["[Ljava.lang.String;"] void] #^{:static true} [stop ["[Ljava.lang.String;"] void] ] ) )
И методы start и stop со специальным префиксом:
(defn -start [& args] (let [port (Integer/parseInt (get mainConfig "server.http.port" "3080"))] (org.apache.log4j.BasicConfigurator/configure) (info "-----------------------------------------") (info "server starting ") (update-state :server (run-jetty app {:port port :join? false})) (info "server started ") ) ) (defn -stop [& args] (info "server stopping ") (.stop (get-state :server)) (info "server stopped ") )
Далее запускаем prunmgr.exe и рулим сервисом, ну или рулим из консоли net start/net stop или sc start /sc stop
Основная дурь оказалась - правильно сигнатуры методов оформить и заставить методы с правильными именами генерится. Хинт типа для массива строк я не нашел, поэтому указал имя типа в лоб.
Осталось разобраться с тремя вещами: откуда оно берет конфиг log4j, как заставить его писать логи в папку доступную сервисюу и почему при стопе сервиса prunsrv.exe валится с исключением.