JBoss EAP 7でサーバサイドJavaScript

こんにちは。平田です。

Java EE 7に対応したJBoss EAP 7の正式版がリリースされました。

7.0.0のリリースノートを見たところ、技術プレビュー扱いですがサーバサイドJavaScriptが使えるようになったので試してみました。

簡単なHTTPエンドポイントの記述

Wildflyのブログ記事を参考に簡単なHTTPエンドポイントを書いてみます。

まず、EAP7にデプロイするWARを用意します。

$ mkdir -p undertow-js-example.war/WEB-INF

次に設定ファイルを作成します。このファイルは、アーカイブ内のサーバサイドJavaScriptを列挙するようです。

$ cd undertow-js-example.war
$ echo example.js > WEB-INF/undertow-scripts.conf

ブログ記事のソースをコピペして、HTTPエンドポイントを書きます(undertow-js-example.war/example.js)。

$undertow
    .onGet("/hello",
        {headers: {"content-type": "text/plain"}},
        [function ($exchange) {
            return "Hello World";
        }])

EAPにデプロイします。ビルド(WAR圧縮するだけですが)の手間を省くため、展開デプロイを利用しています。

$ cd $JBOSS_HOME/bin
$ ./standalone.sh &
$ ./jboss-cli.sh -c --command="deploy path/to/undertow-js-example.war --unmanaged"

エンドポイントにアクセスしてみます。

$ curl -s http://localhost:8080/undertow-js-example/hello
Hello World

ホットデプロイ

続いてホットデプロイ機能を試します。展開デプロイした状態でexample.jsを編集しても反映されません。ホットデプロイを有効にするには、設定ファイルを追加する必要があります。この設定ファイルには、Webコンテントルートのパスを記述します。

$ cd path/to/undertow-js-example.war
$ echo $(pwd) > WEB-INF/undertow-external-mounts.conf

再デプロイします。

$ cd $JBOSS_HOME/bin
$ ./jboss-cli.sh -c --commands="undeploy undertow-js-example.war,deploy path/to/undertow-js-example.war --unmanaged"
$ curl -s http://localhost:8080/undertow-js-example/hello
Hello World

example.jsを編集して再度 HTTP GET すると変更が反映されているはずです。

$ # example.jsの戻り値の文字列を「Hello EAP 7」にして保存
$ curl -s http://localhost:8080/undertow-js-example/hello
Hello EAP 7

その他の情報

JavaScriptからJava EEのリソースやCDIも利用できるようです。Wildflyのブログ記事や、Undertowのマニュアルに詳しい内容が書かれています。JavaScriptで利用できる暗黙変数については、undertow.jsのソースを読むのが良いと思います。

本格的なサーバサイドJavaScriptを使う場合、わざわざEAP7を選ぶことは無いと思いますが、サクッとバックドア的なREST APIを生やす場合、JAX-RSより手っ取り早いかもしれません(バックドア生やしちゃダメですが)。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です