
プロダクトレビュー
話題の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を実際に使ってみる |
||
ホワイトペーパー(TechTargetジャパン)
- Android NDKでJNIを使用してアプリを高速化するには (2010/3/17)
C/C++やOpenGL ESといったネイティブコードを使うためのNDKとJNIを紹介し、その使い方や注意点を徹底解説します - 調査の難しい「OutOfMemoryError」事例、5選 (2010/3/11)
Java開発者が避けて通れないメモリ不足エラーの基本的な問題切り分け方法と発生につながる事例、対処法を解説 - 究極の問題解析ツール、逆コンパイラJD-Eclipseとは (2010/3/8)
ライブラリ内で例外が発生! そのクラスのソースコードを調べたい!! 自動で逆コンパイルしてくれる無料Eclipseプラグインがあります - いまさら聞けない「Webサービス」の常識 (2010/2/26)
昨今では企業システムでも使われる「Webサービス」の概念やJava標準のJAX-WSを紹介しJBoss WSでサンプルを作成
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |










