Vert.x 2.0 で Scala 言語モジュールを使用
Vert.x 2.0 用の Scala 言語モジュールを使って簡単な HTTP サーバーを実装してみます。
サンプルソースは http://github.com/fits/try_samples/tree/master/blog/20130901_4/
Scala 言語モジュールのビルド
Vert.x 用の Scala 言語モジュールは今のところ Vert.x デフォルト設定の Maven リポジトリからは取得できないようですので、今回はソースからビルドする事にしました。
git でソースを取得し、ソースに含まれている gradlew コマンドを使ってビルドします。
> git clone https://github.com/vert-x/mod-lang-scala.git ・・・ > cd mod-lang-scala > gradlew install ・・・ :install BUILD SUCCESSFUL
上記のように gradlew install とする事で、ローカルの Maven リポジトリへ Scala の言語モジュールがインストールされます。(.m2/repository/io/vertx/lang-scala/2.0.0-SNAPSHOT)
Scala による単純な HTTP サーバー
今回は下記のような単純な HTTP サーバー処理を実装してみました。
SampleServer.scala
import org.vertx.scala.core.Future import org.vertx.scala.core.http.HttpServerRequest import org.vertx.scala.platform.Verticle class SampleServer extends Verticle { override def start(future: Future[Void]): Unit = { start() vertx.newHttpServer.requestHandler { req: HttpServerRequest => req.response.end("test data") }.listen(8080) } }
今の Scala 言語モジュールは Scala ソースを直接実行できないようなので、scalac 等を使ってコンパイルしておきます。
コンパイルには下記のような JAR を CLASSPATH に指定します。
- lang-scala-2.0.0-SNAPSHOT.jar
- vertx-core-2.0.1-final.jar
- vertx-platform-2.0.1-final.jar
- netty-all-4.0.7.Final.jar
lang-scala-2.0.0-SNAPSHOT.jar は Scala 言語モジュールのビルド時に build/libs ディレクトリへ生成されており、他の JAR は Vert.x の実行環境に含まれています。
コンパイル例
> scalac -cp ・・・lang-scala-2.0.0-SNAPSHOT.jar;・・・netty-all-4.0.7.Final.jar; SampleServer.scala
実行
実行には、予め langs.properties ファイルへ Scala 言語モジュールの設定を行っておく必要があります。
Vert.x の conf/langs.properties へ追記すれば良さそうな気がしますが、現時点ではこのファイルに追記しても効果は無いようです。
ソースを見たところ CLASSPATH 上の langs.properties を参照するようですので、今回はカレントディレクトリへ下記のような langs.properties ファイルを作成する事にしました。
langs.properties
scala=io.vertx~lang-scala~2.0.0-SNAPSHOT:org.vertx.scala.platform.impl.ScalaVerticleFactory
これで vertx run scala:<クラス名>
を実行すると、Maven のローカルリポジトリから Vert.x の sys-mods ディレクトリへ Scala 言語モジュールがインストールされ(初回のみ)、処理が実行されます。
実行例
> vertx run scala:SampleServer Module io.vertx~lang-scala~2.0.0-SNAPSHOT successfully installed
ちなみに langs.properties へ .=scala
と1行追記しておけば(デフォルトを scala に設定)、vertx run 時に scala: を省略できるようになります。