読者です 読者をやめる 読者になる 読者になる

Vert.x 2.0 で Scala 言語モジュールを使用

Java Scala Vert.x

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: を省略できるようになります。