[Vert.x]JVM上での非同期・Non Blockingフレームワーク – (1)開発環境構築とサンプルソース作成

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

最近はJavaにも興味を持ち始めている、t.hondaです。Javaに関するフレームワークでVert.xを見つけたので、それについて書きたいと思います。

Vert.xは「Node.jsの特徴を受け継ぐJVM上で動くフレームワーク」といった感じのものですが、他にも以下のような特徴を持ちます。

  • 多言語で記述可能(JavaScript, Ruby, Groovy, Javaなど)
  • ブロッキングが発生するような処理(JDBCなど)を独立した処理として切り出すことで、全体をブロックしないようにすることが可能

他にも多くの特徴を持ちますが、以下に挙げるサイトに詳しいので参考にしてください。
Vert.x Main Manual
Vert.x がいいね!(第1回:入門する)
Vert.xのアーキテクチャ

開発環境構築〜サンプルソース作成

では、Vert.xの開発環境の構築とソースの作成です。Maven、Eclipseを使い、ソースを作成してステップ実行するまでの手順について記述します。

1.プロジェクトの作成〜Eclipseへの取り込み

Mavenを使い、プロジェクトを作成します。なので予めMavenをインストールしておいてください。ほぼDeveloping Vert.x Modules with Mavenと同じ手順となります。

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

$ mvn archetype:generate -Dfilter=io.vertx: -DgroupId=com.mycompany -DartifactId=my-vertx-module -Dversion=0.1

作成されたプロジェクトのフォルダに移動します。

$ cd my-vertx-module

Mavenを使い、必要なモジュール・雛形をインストールします。

$ mvn install

Eclipseの「Project Explorer」より、上記で作成したMavenのプロジェクトをインポートします。(pom.xmlがあるフォルダ「my-vertx-module」をインポート時に指定してください。)

2.サンプルソースの作成

では、ソースの作成です。先にも書いたように様々な言語を使用できますが、今回はJavaを使用しました。src/main/java内に「HelloVertX」クラスを作成し、以下のように記述します。

package com.mycompany;

import org.vertx.java.core.Handler;
import org.vertx.java.core.http.HttpServer;
import org.vertx.java.core.http.HttpServerRequest;
import org.vertx.java.platform.Verticle;

public class HelloVertX extends Verticle{
    public void start() {
        final HttpServer server = vertx.createHttpServer();
        server.requestHandler(new Handler<HttpServerRequest>() {
            public void handle(HttpServerRequest req) {
                req.response().headers().set("Content-Type", "text/plain");
                req.response().end("Hello vert.x!");
            };
        });
        server.listen(8080);
    }
}

ちょっと冗長かもしれませんが、Hello World的な処理を行うソースです。ポート8080番でリクエストを受け付け、レスポンスとして「Hello vert.x!」と返します。

Mainの定義

上記で作成したクラスを、アプリケーションのMainとして定義します。src/main/rosourcesの「mod.json」に「"main":"com.mycompany.PingVerticle",」という記述があるので、以下のように修正します。

  // Java verticle
  //"main":"com.mycompany.PingVerticle",
  "main":"com.mycompany.HelloVertX",

3.アプリケーションの実行

では、実行してみます。まずはデバッグなしの実行手順です。以下のコマンドを実行します。

$ mvn clean compile vertx:runMod

実行できたら、ブラウザでhttp://localhost:8080にアクセスしてみます。「Hello vert.x!」が表示されたら、実行完了です。

4.アプリケーションのデバッグ

次にデバッグの手順です。ソース内にブレークポイントを設定し、以下のコマンドでデバッグ用のプロセスを起動します。

$ mvnDebug vertx:runMod

このとき、ターミナルに表示されるポート番号をメモしておいてください。(デフォルトでは8000だと思われます。)

Eclipseから、上記で起動したプロセスにアタッチします。手順としては

  • Eclipseの「Run」-「Debug Configuration...」を開く
  • 「Remote Java Application」を右クリックし、「New」を押す
  • 「Connect」タブの「Host」にはlocalhost、「Port」には上記でメモしたポート番号を記入する
  • 「Debug」ボタンを押す
  • ブラウザにてhttp://localhost:8080にアクセスする

となります。これでブレークポイントで処理が止まり、ステップ実行が出来ればデバッグ環境も完成です。

まとめ

ここ数年はNon-blockingなサーバ処理といえばNode.js、という感じですが、JVM上でも実行できるフレームワークがあることが分かりました。Javaの豊富なライブラリや既存資産を生かしたい、何らかの理由でJavaや他言語(Vert.xは様々な言語で記述できる!)で処理を書きたい等の場合、Vert.xを検討してみてもいいかもしれません。

参考サイト

上と重なるものもありますが、以下のサイトを参考にさせて頂きました。ありがとうございました。
Developing Vert.x Modules with Maven
Vert.x がいいね!(第2回:開発環境を構築する)
Debugging vert.x applications with Eclipse
Vert.xアプリをEclipseからデバッグする
Run Vertx in an IDE
Vert.x Main Manual
Vert.x がいいね!(第1回:入門する)
Vert.xのアーキテクチャ