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が表示されるまで実行できるはずです。
