【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷



プロダクトレビュー
話題の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は、ほかの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を実際に使ってみる


ホワイトペーパーTechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています