1. Qiita
  2. Items
  3. immutant

immutantを用いてclojureで開発してWildflyで動かす

  • 5
    Like
  • 1
    Comment
More than 1 year has passed since last update.

はじめに

immutantを使ってごく単純なWebアプリを作り、Wildflyにデプロイして動かしてみます。
immutantのWebサーバーはWildflyで実装されているundertowです。undertowは軽量、高速でWebサーバーのベンチマークでも極めて良好な性能を出しています。
ベンチマークは以下のものを参考にして下さい。

http://www.techempower.com/benchmarks/

プロジェクトの作成

以下のコマンドでプロジェクトを作成します。

$ lein new app my-app

生成されたproject.cljに対してimmutantを利用するためdependenciesを追加します。また、leinningenのimmutantコマンドを利用可能にするため、lein-immutantをプラグインに追加します。

(defproject my-app "0.1.0-SNAPSHOT"
  :description "Simple wildfly server"
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.immutant/immutant "2.0.0-beta2"]
                 ]
  :main my-app.core
  :target-path "target/%s"
  :plugins [[lein-immutant "2.0.0-beta1"]]
  :uberjar-name "my-app-standalone.jar"
  :profiles {:uberjar {:aot [my-app.core]}} 

Webアプリの作成

src/my_app/core.cljを以下のようにします。

(ns my-app.core
  (:require [immutant.web :as web])
  (:gen-class))


(defn app [request]
  {:status 200
   :body "Hello immutant wildfly server !"})

(web/run app {:host "localhost" :port 8080 :path "/"})

replを利用したテスト

replを使ってインターラクティブにテストします。

$ lein repl
nREPL server started on port 52410 on host 127.0.0.1 - nrepl://127.0.0.1:52410
REPL-y 0.3.5, nREPL 0.2.7
Clojure 1.6.0
Java HotSpot(TM) 64-Bit Server VM 1.8.0_40-b26
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

my-app.core=> (ns my-app.core
         #_=>   (:require [immutant.web :as web])
         #_=>   (:gen-class))
nil
my-app.core=> (defn app [request]
         #_=>   {:status 200
         #_=>    :body "Hello immutant wildfly server !"})
#'my-app.core/app
my-app.core=> (run app {:host "localhost" :port 8080 :path "/"})
07:46:52.737 INFO  [org.projectodd.wunderboss.web.Web] (nREPL-worker-0) Registered web context /
{:path "/", :immutant.internal.options/validated? true, :dispatch? true, :auto-start true, :static-dir nil, :port 8080, :host "localhost", :virtual-host nil, :configuration nil, :contexts {#<UndertowWeb org.projectodd.wunderboss.web.UndertowWeb@32726d26> ({:virtual-host nil, :path "/"})}, :servlet-name nil, :filter-map nil}
my-app.core=> 

ブラウザでhttp://localhost:8080を開くとhello worldが表示されます。

immutant1.png

wildflyのインストール

以下のコマンドでwildflyをインストールします。

$ wget http://download.jboss.org/wildfly/8.2.0.Final/wildfly-8.1.0.Final.zip
$ unzip wildfly-8.2.0.Final.zip

JBOSS_HOMEを設定します。

export JBOSS_HOME=/usr/local/oss/wildfly-8.2.0.Final
export PATH=$JBOSS_HOME/bin:$PATH

デプロイするためにコードの修正

-main関数を追加して、web/runの部分をコメントアウトします。

(ns my-app.core
  (:require [immutant.web :as web])
  (:gen-class))


(defn app [request]
  {:status 200
   :body "Hello immutant wildfly server !"})

(defn -main [& {:as args}]
 (web/run app {:host "localhost" :port 8080 :path "/test"})
)

;;(web/run app {:host "localhost" :port 8080 :path "/"})

Wildflyへのデプロイ

lein immutantコマンドを利用してwarファイルを作成し、wildflyにデプロイします。JBOSS_HOMEにはwildflyのインストールディレクトリが設定されているものとします。

$ lein immutant war -o $JBOSS_HOME
Compiling my-app.core
Created /home/makoto/clojure/my-app/target/uberjar+uberjar/my-app-0.1.0-SNAPSHOT.jar
Created /home/makoto/clojure/my-app/target/uberjar/my-app-0.1.0-SNAPSHOT-standalone.jar
Created /usr/local/oss/wildfly-8.1.0.Final/standalone/deployments/my-app.war

wildflyの起動、テスト

wildflyを起動します。

$ standalone.sh -c standalone-full.xml

ブラウザでhttp://localhost:8080/my-appを開くとhello worldが表示されます。

immutant2.png

おわりに

immutantを使うとwebアプリが簡単に作成、デプロイができることが分かりました。次回はimmutantを用いてwebsocketのプログラムの作成手順を投稿する予定です。

immutant_icon_256px_flipped.png

Comments Loading...