2013年6月28日

【Vert.x】JavaScriptでMySQL接続



今回はWebアプリを作るなら必須のDB接続をしたいと思います。

Vert.xはJavaで動いていますので、
JDBCを使ってMySQLへ接続いたしますが、
jdbc-persistor-v1.2というVert.xのモジュールを使ってみましょう。

jdbc-persistor-v1.2のダウンロード

まずはモジュールをダウンロードします。
プロジェクトディレクトリまで移動し、
vertx install com.bloidonia.jdbc-persistor-v1.2 -repo vert-x.github.io
vertx install vertx.work-queue-v1.2 -repo vert-x.github.io
と、モジュールをインストールします。
したのwork-queueはjdbc-persistorの依存モジュールです。
-repoを指定するのは、GitHubのURLが変更になったため、
指定無しでインストールが出来なくなった為です。

インストールしたら、プロジェクトディレクトリに
./modsというディレクトリが出来ていると思います。

mysql-connector-javaのインストール

yumでmysql-connector-javaをインストールし、
シンボリックリンクをモジュールのディレクトリへ作成します。

yum install mysql-connector-java
rpm -ql mysql-connector-java | grep jar
ln -s /usr/share/java/mysql-connector-java-5.1.17.jar /path/to/project/mods/com.bloidonia.jdbc-persistor-v1.2/lib/
ln -s /usr/share/java/mysql-connector-java.jar /path/to/project/mods/com.bloidonia.jdbc-persistor-v1.2/lib/
rpmはjarファイルのパス確認の為に使っています。
/usr/shareにjarが無ければrpmで確認して下さい。

プログラム

今回はモジュールとEventBusを利用します。
MySQLはlocalhost:3306で動いているものとします。
データベース名はvertx、ユーザ名/パスワードはadminとしています。
テーブルは下のような感じで。
CREATE TABLE `test` (
  `_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `num` int(11) unsigned NOT NULL,
  PRIMARY KEY (`_id`)
);

load('vertx.js');
// サーバーインスタンスを生成
var server = vertx.createHttpServer();
// ルーティングするインスタンスを生成
var rm = new vertx.RouteMatcher();
// イベントバスインスタンス
var eb = vertx.eventBus;

// SELECT文のテスト
rm.get('/select', function(req) {
  eb.send('test.persistor', {
    action: 'select',
    stmt  : 'SELECT * FROM test ORDER BY _id ASC;'
  }, function(reply) {
    // HTTPレスポンスヘッダーにContent-Length追加しないとエラーになるので、
    req.response.setChunked(true);
    if(reply.status === 'ok') {
      req.response.write('Vert.x');       for each(var rec in reply.result) {         req.response.write('

');       }       req.response.end('
' + rec._id + '' + rec.num + '
'); } else { req.response.end(reply.message); } }) }); // サーバを立ち上げる server.requestHandler(rm).listen(80, 'localhost'); // DB設定 var mysqlPersistorConf = { address : 'test.persistor', driver : 'com.mysql.jdbc.Driver', url : 'jdbc:mysql://localhost:3306/vertx', username : 'root', password : '' } // モジュールを使ってDBへ接続する vertx.deployModule( 'com.bloidonia.jdbc-persistor-v1.2', mysqlPersistorConf, 1, function( reply ) { console.log( 'connected' ) ; });

以上でアプリケーションを実行するとMySQLへ接続出来ていると思います。
一応これでテーブルの中身を出力する事が出来ました。

駄文:ボルダリング後にこの1週間分の記事を全部書いたら腕が痛いし、キーの押し間違いが激しいです。