Carbonado: Java製オープンソースORMフレームワーク
Carbonadoは、
Javaで開発されたオープンソースの関連データベースマッピングフレームワークです。従来のオブジェクト関係マッピング(ORM)とは異なり、オブジェクト指向の原則を維持しながらも、関係モデルを尊重する設計が特徴です。SQLやJDBCの特定機能に依存しないため、Berkeley DBなどの非SQLデータベース製品もサポートしています。これにより、SQLのオーバーヘッドを排除しつつ、クエリやインデックスといった関連機能が利用できます。
歴史
Carbonadoは、
Amazon.comが内部利用のために開発したフレームワークを改修したものが起源です。その後、Apache
ライセンスの下でオープンソースプロジェクトとして公開されました。
エンティティ定義
Carbonadoでは、関連エンティティは「Storables」として定義されます。これはインターフェースまたは抽象クラスによって宣言されます。アノテーションを利用することで、
Javaインターフェースだけでは表現できない機能を指定可能です。全てのStorableには、エンティティの主キーを記述するアノテーションが必須となります。
Storableは、POJO(Plain Old
Java Object)とは異なり、常にStorableスーパークラスを拡張する必要があります。これにより、組み込みの様々なメソッドにアクセスできます。Storableの定義には、アクティブレコードパターンに従ったビジネスロジックを含めることも可能です。
Storableの実装は、実行時にCarbonado自身によって生成されます。toString、equals、hashCodeといった標準的なオブジェクトメソッドも自動的に生成されるため、開発者は定型的なコードを書く必要がなくなり、新しいエンティティの定義プロセスが大幅に簡素化されます。キーによるStorableのロードは、まずファクトリメソッドを呼び出して未初期化のインスタンスを作成することから始まります。次に、キーのプロパティを設定し、loadメソッドを呼び出すことで完了します。
リポジトリは、基盤となるデータベースへのアクセスを制御するゲートウェイです。Carbonadoには、以下のコア実装が用意されています。
JDBCアクセス
Berkeley DB
Berkeley DB
Java Edition
インメモリデータベース
さらに、単純なレプリケーションやロギングをサポートする複合
リポジトリも利用できます。全ての
リポジトリは、ビルダーパターンを用いて構築され、各ビルダータイプは特定の
リポジトリタイプに特化したオプションを提供します。
リポジトリインスタンスが構築された後は、標準インターフェースのみに準拠します。特定の機能へのアクセスは、Capabilityインターフェースを通じて提供されます。
クエリ実行
Carbonadoのクエリは、単純なフィルタ式と順序付け仕様によって定義されます。SQLのWHERE句に相当するフィルタには、結合プロパティやサブフィルタを含めることが可能です。例として、特定メッセージを持つエンティティを照会するクエリを以下に示します。
java
// 例:特定のメッセージを持つエンティティを検索する
Query
query = repo.query(MyEntity.class)
.where(MyEntity.MESSAGE.eq("特定メッセージ"));
トランザクション
トランザクションは、リポジトリインスタンスから作成され、スレッドローカルストレージのスコープを定義します。複数の永続化操作は自動的にグループ化され、commitメソッドを呼び出すことでトランザクションが完了します。
この設計アプローチは、従来の関連データベースマッピングフレームワークとは異なるCarbonadoの特徴を示しています。一般的に、これらのフレームワークはセッションを使用して変更を追跡し、トランザクションの概念を抽象化することが多いですが、Carbonadoでは全てのアクションが直接的です。
参考文献
Carbonado Home Page