nettyとhazalcast
Vert.xのベースとなるライブラリとして、nettyとhazelcastが使われています。
nettyについては日本でもよく利用されているライブラリなので説明を割愛しますが、Vert.xの非同期IOの処理において、密接に依存する関係で利用されています。
hazelcastの方はなかなか知られていないと思いますが、インメモリーデータグリッドと呼ばれるメモリー上で分散処理を行うための高性能なライブラリです。商用製品だとOracleのCoherenceがよく知られているかと思います。
Vert.xでは、hazelcastの一部の機能を利用してEventBusをクラスター化し、ネットワーク上での分散処理を可能にするために利用しています。Vert.x内部で隠蔽されているため、利用するユーザーはとくに意識する必要はありません。
モジュールの構成
モジュールに含まれる要素として必須なものが2つあります。
org.vertx.java.platform.Verticleインターフェースの実装クラス
モジュールのmainともなるインターフェースです。Vert.x起動時にデプロイされ、そのstart()メソッドがコールされることで初期化、起動が行われます。モジュール内には複数のVerticleを含めることができます。
mod.json
モジュールごとの起動設定を記述する設定ファイルです。"main"をキーとしてモジュールの最初に起動されるVerticle実装クラスを指定する必要があります。
その他の項目は、公式サイトのマニュアルを参照してください。templateのsrc/main/resources/mod.json を見てみると、各言語ごとに"main"の記述例があります。
{ // Java verticle "main":"com.mycompany.myproject.PingVerticle", // In this example we also provide various other versions of the main verticle, you can uncomment this and // play around: // Java *source* verticle //"main":"JavaSourcePingVerticle.java", // Compiled Groovy verticle - note that they must be prefixed with 'groovy:' to distinguish them from compiled Java verticles //"main":"groovy:com.mycompany.myproject.GroovyPingVerticle", // Groovy *script* verticle //"main": "GroovyVerticle.groovy", // Ruby verticle //"main":"ping_verticle.rb", // JavaScript verticle //"main": "ping_verticle.js", // Python verticle //"main": "ping_verticle.py", // If your module is going to be registered in the Vert.x module registry you will also need the following // mandatory fields "description":"Put description of your module here", "licenses": ["The Apache Software License Version 2.0"], "author": "Joe Bloggs", // Optional fields "developers": ["Other Dev 1", "Other Dev 2"], "keywords": ["gerbils", "cars", "cheese", "chocolate", "underpants", "herring"], "homepage": "url to your project page", "auto-redeploy": true }