SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaプログラマーのための実践「Vert.x」

Vert.xによる簡単なRESTアプリケーションの作成

Javaプログラマーのための実践「Vert.x」 第3回

mod.jsonの修正

 resources/mod.jsonの"main"に設定されているクラスを今回作成したExampleBusに変更します。

// Java verticle
//"main":"com.mycompany.myproject.PingVerticle",
"main":"com.dmm.vertx.example.ExampleBus",

conf.jsonの修正

 DBの接続情報やHTTPのポート番号を設定するため、conf.jsonを最低限、下記のように修正します。

{
  "address": "jdbc",             // mod-jdbc-persistor用アドレス
  "driver": "org.h2.Driver",     // JDBCドライバー
  "url": "jdbc:h2:mem:example",  // JDBC接続URL(H2DBメモリーDB)

  "portNo": 8080                 // HttpServerポート番号
}

起動スクリプトの作成

 各モジュールのデプロイ順を制御することで、問題なく起動できるように起動用のスクリプトを作成します。第1回ではJavaScriptでしたが、今回はgroovyで作成してみます。

startup.groovy
vertx.eventBus.registerHandler("jdbc.ready") { message -> // mod-jdbc-persostorデプロイ完了時
    println('jdbc ready')
    container.deployModule('com.mycompany~my-module~1.0.0-final', container.config, 2, {result ->
        if (result.succeeded()) {
            println('my-module ready')
        } else {
            println(result.cause())
            println('module failure')
            container.exit()
        }
    })
}
vertx.eventBus.registerHandler("http.ready") { message -> // RestVerticleデプロイ完了時
    if (message.body.status == 'error') {
        container.exit();
    } else {
        println("http open.");
    }
}
println(container.config)
container.deployModule('com.bloidonia~mod-jdbc-persistor~2.1', container.config, { result ->
    if (!result.succeeded()) {
        container.exit();
    }
})

 上記のソースを見ていただければ分かるかと思いますが、各モジュールのデプロイ完了イベントを受けてから次のモジュール、Verticleのデプロイを実施しています。クライアントからのリクエストはプロセスの準備が完了してから送られてくるとは限りません。そのため、すべてのモジュールの準備ができてからポートを開放するように制御しています。

ビルドの実行

 このままの状態でビルドをすると、templateに含まれている単体テストが通らず、ビルドが失敗してしまいます。そこで、ExampleBusのstartメソッドに少し書き加えます。

super.start(startedResult);
this.eb.registerHandler("ping-address", new Handler<Message<String>>() { // for unit test
   @Override
   public void handle(Message<String> message) {
      message.reply("pong!");
      logger.info("Sent back pong");
   }
}); // end

 不必要な単体テストを削除してしまえば済む話ですが、今回はtemplateの各ソースはいじらずに追加だけしていきます。

 では、このままgradlewコマンドでビルドします。

gradlew build

 test実行時に、各lang-jythonやlang-jrubyのダウンロードでタイムアウトが発生して失敗することもあるかもしれませんが、何回か再実行すればBUILD SUCCESSFULが表示されるまで実行できるはずです。

次のページ
起動してみます

この記事は参考になりましたか?

Javaプログラマーのための実践「Vert.x」連載記事一覧

もっと読む

この記事の著者

リョウジ(株式会社DMM.comラボ)(リョウジ)

DMM.comのプラットフォームにおける主要アーキテクチャに関しての技術研究開発を担当。 非同期のメッセージ&キューの導入、Vert.xフレームワークを採用し社内の基盤を整備等、 高負荷対策・可用性の高いアーキテクチャの開発・設計など幅広く活躍。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8712 2015/06/08 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー