Created
August 17, 2014 19:40
-
-
Save matstani/1ad5129577c065d4a8cf to your computer and use it in GitHub Desktop.
ringアプリケーションをcomponent化
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(ns example-component-ring.component | |
(:require [com.stuartsierra.component :as component] | |
[example-component-ring.handler :refer [app]] | |
[ring.adapter.jetty :refer [run-jetty]])) | |
;; HTTPサーバコンポーネント | |
(defrecord HttpServer [port server] | |
component/Lifecycle | |
(start [this] | |
(if server | |
this | |
(do (println ";; Starting HTTP server") | |
(let [server (run-jetty app | |
{:port port | |
:join? false})] | |
(assoc this :server server))))) | |
(stop [this] | |
(if (not server) | |
this | |
(do (try (.stop server) | |
(catch Throwable t | |
(print ";; Error when stopping HTTP server"))) | |
(println ";; HTTP server stopped") | |
(assoc this :server nil))))) | |
;; HTTPサーバコンポーネントの作成用関数 | |
(defn create-http-server [port] | |
(map->HttpServer {:port port})) | |
;; システム作成用関数 | |
(defn create-system [config-options] | |
(let [{:keys [port]} config-options] | |
(component/system-map | |
:http-server (create-http-server port)))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment