こんにちは。平田です。
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より手っ取り早いかもしれません(バックドア生やしちゃダメですが)。