プロダクトレビュー
話題のO/Rマッピングツール「Cayenne」を使う
米山学
株式会社クロノス
2004/7/24
近ごろ、O/Rマッピング・フレームワークの話題をよく耳にします。HibernateやTorque、Castor、PriDEなど、O/Rマッピングのためのプロダクトも数多く登場してきています。この背景には、オブジェクト指向言語とリレーショナル・データモデルのインピーダンス・ミスマッチを解消するソリューションが渇望されているという状況もあり、Java開発者にとってO/Rマッピングに関する話題は今後も目が離せないものでしょう。
さて、O/Rマッピングの概要に関する説明は、現在@ITでも連載中の「Hibernateで理解するO/Rマッピング」に譲るとして、本稿では数あるO/Rマッピングツールの中でも、最近注目が高まってきた「Cayenne」と呼ばれるO/Rマッピング・フレームワークについて、実際に使いながらマッピングツールとしての使い勝手を見てみます。
Cayenneの構造と仕組み |
Cayenne(カイエン)は日本語に訳すと「唐辛子」という変わったプロダクト名を持つO/Rマッピング・フレームワークです。2002年6月にアルファ版がリリースされてから2年ほど経過したため、それほど新しいプロダクトというわけではありません。しかしながら最近はTheServerSide.comなどの記事にも頻繁に取り上げられ、Hibernateとも比較されることで注目を集めてきています。
Cayenneはオープンソース・ソフトウェアの開発を行っているコミュニティ「ObjectStyle」によって提供されており、誰でも無償で利用することができます。
- CayenneのWebサイト
http://objectstyle.org/cayenne/index.html
Cayenneは、ほかのO/Rマッピング・フレームワーク同様に、データベースのエンティティをJavaのオブジェクトとして扱うことができるような便利な機能を提供しているほか、データベースとのマッピング・ファイルを生成するAntタスクやGUIツールも提供しています。また、主キーの自動管理やテーブル間のリレーションにも対応しており、ローカルおよび分散環境でのキャッシュ機能や楽観ロックのサポートなどの特徴も備えています。
CayenneをHibernateと比較した場合、Outer Joinをサポートしていないなど機能面の不足が多少見受けられる半面、便利な点として付属のGUIツールを挙げることができます。パフォーマンスの比較に関しては、単純なベンチマーク・テストでは両者ともそれほど変わりがないという記事が公表されています。詳しくは「Cayenne And Hibernate」を参照してください。
実際にCayenneを使ってみる前に、その構造と仕組みを見てみましょう。
■DataObjectインターフェイスとCayenneDataObjectクラス
CayenneではRDBのテーブル(エンティティ)は、org.objectstyle.cayenne.DataObjectインターフェイスによって表現されます。DataObjectインターフェイスにはエンティティ・クラスとして最低限必要なメソッドが定義されており、そのデフォルト実装としてorg.objectstyle.cayenne.CayenneDataObjectクラスが用意されています。
図1 アプリケーションはDataObjectによってテーブルに対する操作を行う |
実際にCayenneを利用するアプリケーション側では、このCayenneDataObjectを継承した具象DataObjectクラス(エンティティ・クラス=各テーブルを表現)から生成されたインスタンス(エンティティ・オブジェクト=各レコードを表現)を利用してデータベースアクセスのプログラムを記述します。
例えば、データベースにEmployeeテーブルとDepartmentテーブルがある場合、このエンティティ・クラスは図2のクラス図のような階層構造となります。
図2 エンティティ・クラスの継承関係を表すクラス図 |
■DataContextクラス
org.objectstyle.cayenne.access.DataContextクラスは、エンティティ・オブジェクトの取得や永続化、システム・レベルのサービスに関する機能を提供します。Cayenneを利用するアプリケーションはこのDataContextを介してエンティティ・オブジェクトを取得し、データベースに対する操作(SQL文の発行、コミットやロールバックなど)を実行します。このDataContextはユーザー・セッションが持続している間維持されます。
また、Cayenneでは1つのアプリケーションで複数のデータベースを扱うことをサポートしています。その場合には接続するデータベースごとにDataContextを作成します。
図3 DataContext |
■ObjectId
Cayenneのエンティティ・オブジェクトはObjectIdによって識別されます。ObjectIdは主キーを抽象化したものであり、org.objectstyle.cayenne.ObjectIdクラスのインスタンスとして各エンティティ・オブジェクトに関連付けられます。つまり、図4に示すようにテーブルの各レコードに対してエンティティ・オブジェクトが対応し、主キーのフィールドに対応するObjectIdオブジェクトがそれぞれのエンティティ・オブジェクトにコンポジット集約として関連付けられるわけです。なお、このObjectIdの生成や管理はCayenneが受け持ちます(開発者が生成してエンティティに関連付けることも可能です)。
図4 テーブルとエンティティ・オブジェクト |
■Cayenneのインストールと環境のセットアップ
次のページからCayenneを実際に使いながら、その特徴を見ていきます。その前にインストールを行ってみましょう。その後、簡単なサンプル・コードを通して使い方を紹介していきます。この原稿を書いている時点での最新バージョンはCayenne
1.1 (Milestone Release 7) です。ダウンロードページ(http://objectstyle.org/cayenne/download.html)から「cayenne-1.1M7_1.tar.gz」をダウンロードして任意のディレクトリに解凍しておいてください。
なお、今回紹介するサンプルではデータベースにMySQLを使っていますが、CayenneではほとんどのメジャーなRDBをサポートしています。MySQL以外のRDBを使用する場合には、それぞれの環境に応じて適宜本文を読み替えてください。また適切なJDBCドライバのセットアップも済ませておいてください。
アーカイブを解凍した後は「lib」ディレクトリに格納されている「cayenne.jar」をクラスパスに設定するだけでセットアップは完了です。
1/3 |
INDEX |
||
話題のO/Rマッピングツール「Cayenne」を使う | ||
Page1 Cayenneの構造と仕組み |
||
Page2 サンプルアプリケーションを作成する |
||
Page3 Cayenneを実際に使ってみる |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|