「Clojure と slim3」の夏がやってくる (其の弐)

(其の壱) で

これで、コントローラーの Clojure 化を無事果たすことができました。
次は、サービスの Clojure 化に挑戦してみたいと思います。

と申し上げたのですが、maven が生成する初期プロジェクトのコントローラーとサービスの Clojure 化を目指すことに変更しました。

取りあえず、出来上がった IndexController.clj は下記の通りです。

IndexController.clj

(ns com.example.controller.IndexController
    (:gen-class
        :extends org.slim3.controller.Controller
        :exposes {response {:get getResponce, :set setResponce}}
        :exposes-methods {forward forwardS, requestScope requestScopeS})
    (:import
        com.example.meta.Slim3ModelMeta,
        com.example.model.Slim3Model,
        java.util.Date,
        org.slim3.datastore.Datastore))


(defn -run
    "Docstring for -run."
    [this]

    (let [res (.. this getResponce)]
        (.println (.. res getWriter) "Hello, World!")

        (let [model (Slim3Model.)]
            (.setProp1 model (.. (Date.) toString))
            (Datastore/put model))

        (doseq [x (.. (Datastore/query (Slim3ModelMeta/get)) asList)]
            (.println (.. res getWriter) (.. x getProp1)))

        (.flushBuffer res)))

Java の IndexController 同様、"Hello World!" を出力した後、put した Slim3Model の query 結果から順次 prop1 の内容を出力します。

さて、次は、今度こそ、サービスの Clojure 化に挑戦してみたいと思います。


追伸: しかし、本当に Clojure のソースは美しいですね。もう 、ちょっと Java には戻れませんって。