Amazon の ORマッパ Carbonado
JavaのORマッパと言えばhybernateが有名だが,なんか,やたら複雑そうに見えたので,最近出てきたCarbonadoのほうを試してみた.Carbonadoの特徴は,バックエンドのデータベースにいわゆるRelational DBではないBerkely DBが使えること.だから正確にはORマッパではないのかも.にもかかわらず,joinなどのRDB特有の処理もちゃんとできる.不思議.これに関しては,ここに興味深い記事があった.参考になる.
ところで,Carbonadoはカーボネード(黒ダイヤ)のことらしい.どういうニュアンスなんだろう?
ダウンロードとインストール
さて,まずはインストールしてみよう.バックエンドのDBとしては,せっかくなので(?)BarkleyDBを使ってみる.sleepycatというOracle傘下のプロジェクトの二つのBerkley DB実装,BDBとJEが使えるのだが,今回は,Java実装であるJEのほうを使ってみよう.
まずは,Carbonadoのダウンロード.ホームページからJarファイルがダウンロードできる.CarbonadoとCarbonadoSleepyCatJEの双方をダウンロードし,同じ場所で展開する.展開してみると,なかにはMANIFESTとソースツリーがごろんと入っているだけ.build.xmlどころかREADMEやLICENCEも入っていない.いいんだろうか?
これと独立してここから,sleepycatJEをダウンロードして,ビルドしなければならない.ダウンロードするためには,Oracle technology networkに入らなければならない.
さらに,いくつか必要なモジュールがある.
- Apache commons logging - ロギング
- Joda-Time - 日付関連のライブラリ群
- Cojen - バイトコード操作ツール
はっきりいってそうとう面倒くさい...
使ってみる
ダウンロードしたパッケージには何もドキュメントが含まれていないが,上記のサイトにドキュメントのPDFがある.
Storable の定義
データベーステーブルに相当するインターフェイスを定義する.ここではクラスではなく,インターフェイスとしているが,アブストラクトクラスでもよいようだ.Beanとして定義する.
@PrimaryKey("ID") public interface StoredMessage extends Storable{ long getID(); void setID(long id); String getMessage(); void setMessage(String message); }
これでIDとMessageを持つテーブルが定義できた.@PrimaryKeyでプロパティ IDがプライマリキーであることを示している.
データの挿入
データオブジェクトを作るには,Carbonadoのレポジトリオブジェクトに対してstorageForメソッドを呼び出して,Storageオブジェクトをつくり,さらにそれに対してprepareメソッドを呼び出す必要がある.storageForメソッドの引数はインターフェイスのクラスオブジェクト.
Storagestorage = repo.storageFor(StoredMessage.class); StoredMessage message = storage.prepare(); message.setID(1); message.setMessage("Hello Carbonado!"); message.insert();
データの検索
検索にはQueryオブジェクトを用いる.
Queryquery= storage.query("ID = ?").with(0); Cursor cursor = query.fetch(); while (cursor.hasNext()) System.out.println(cursor.next());
なんというか,ちょっと隔靴掻痒な感が...