連載 役に立つXMLツール集(7)
RelaxerでオブジェクトをRDBにマッピング Page 1

XMLプログラミングでは、DOMやSAXといったAPIを使用すると単調なコードを繰り返し書くことになり生産性が上がらないものだ。本連載では開発者が“楽をする”ために役立つXML関連ツールを紹介していく。(編集局)

www.netpotlet.com
原田洋子
2004/5/14

O/RマッピングツールとしてのRelaxer

主な内容
--Page 1--
O/RマッピングツールとしてのRelaxer
Relaxer JDBCとは
Relaxerの入手とサンプル実行環境のセットアップ
--Page 2--
サンプルアプリケーションの設計
--Page 3--
サンプルアプリケーションの実装
まとめ&サンプルダウンロード
参考サイト

 前回「CastorでオブジェクトをRDBにマッピング」ではCastorが提供するO/Rマッピング、Castor JDOを紹介しました。Castor JDOはオブジェクトモデルからリレーショナルモデルへのマッピングに、いわゆるデータバインディングツールとしてのマッピング機能を応用したものでした。また、データバインディングツールですからデータベースを操作するクラスが自動生成され、簡単にプログラミングできるようになっていました。

 今回も、引き続きデータバインディングツールによるO/Rマッピングを紹介します。今回取り上げるのは第4回「Relaxerでデータバインディングに挑戦しよう」でも紹介した、RelaxerによるO/Rマッピングです。Relaxerは単にスキーマからJavaのクラスを生成するばかりではなく、作成するアプリケーションに必要なデザインパターンのためのクラスまでも生成するなど、さまざまな使い方ができるツールです。その1つの例として、第5回「スキーマコンバータ/バリデータ/ビジターパターン」ではビジターパターンを紹介しましたが、今度はO/Rマッピング機能であるRelaxer JDBCについて見ていきます。

Relaxer JDBCとは

 「データベースを組み合わせたアプリケーションを作るのはよくある」という話を前回でしました。もし、XMLモデルを導入したために、オブジェクトモデルとリレーショナルモデル間のマッピングがシームレスにつながらなくなってしまうと、XMLモデル採用がかえってデメリットになってしまいます。

 そこで、RelaxerはXMLモデルからオブジェクトモデル、さらにリレーショナルモデルまでもスムーズに利用できるように機能が拡張されています。図1にRelaxerがどのようにリレーショナルモデルとのマッピングを行うかを示します。図1のマッピングのうち、本記事で紹介するのは XMLスキーマをスタート地点にするRelaxer JDBCです。これ以外にはリレーショナルモデルからマッピングするJDBCインポーターと、オブジェクトモデルをより発展させたコンポーネントモデルへマッピングするRelaxer CDLがあります。Relaxer CDLを利用する場合、同時にEJBのクラス群も生成させるとEJBを介してリレーショナルモデルを扱えます。

 なお、Relaxer JDBCを利用するには、Relaxer実行時にjdbcオプションを指定します。

図1 Relaxerのマッピング

 前回、O/Rマッピングツールの概要について説明しましたが、Relaxer JDBCについてもどのような性格のO/Rマッピングツールなのかを見てみましょう。

データベースとの接続

 まず、データベースとの接続がどうなっているかですが、Relaxer JDBCには、通常のJDBC APIを利用したプログラミングと同等の方法でコネクションを取得する機能があります。また、Relaxer実行時にjdbc.eeオプションを指定するとJNDI(Java Naming and Directory Interface)を利用してデータベースをリソースとして参照できるようにもなります。さらに、Relaxer JDBCの機能により取得したコネクションしか使えないのではなく、アプリケーションサーバが管理する接続も利用できるようになっています。

静的マッピング(オブジェクト構造のマッピング)

 次に、オブジェクトモデルからリレーショナルモデルへのマッピングです。「静的」に分類したオブジェクト構造のマッピングですが、Relaxer JDBCはRELAX NGで定義されたスキーマからデータベースのテーブルを作成するDDL(Data Definition Language)と、JDBC APIを使ってデータベースを操作するクラス定義を自動生成します。Castor JDOやHibernateTorqueなどのO/RマッピングツールがXMLインスタンスからデータベース操作のためのクラス定義をつくり出すのに対して、Relaxerはスキーマから定義をつくり出す点は大きな違いです。Relaxer実行時にjdbcオプションを指定するとデータベースを操作できるクラスとデータベースのテーブル定義DDLを自動的に生成しますが、スキーマ定義があるので、的確なテーブル定義が生成されると同時に、スキーマどおりに書かれたXML文書をデータベースに入力するのも簡単です。

動的マッピング(SQL文生成から実行までの操作のマッピング)

 「動的」に分類した実行時に行われるマッピングはどうなっているでしょうか。Relaxer JDBCではデータの登録、更新についてはAPI方式、問い合わせについてはAPI方式とクエリ方式の併用が採用されています。ただし、Relaxer JDBCはOQL(Object Query Language)やHQL(Hibernate Query Language)といったオブジェクト指向的なクエリ言語ではなく、素のSQLを使います。トランザクションは基本的に内部で行われますが、コネクションを直接扱えるようになっているので、プログラマがコミットするタイミングなどを指定することも可能です。

Relaxerの入手とサンプル実行環境のセットアップ

 Relaxer JDBCはRelaxerの機能の一部なので、まずはRelaxerを入手します。本連載第4回の「Relaxerの入手とセットアップ」も参照してください。ただし、本記事では1.1ベータ版を使用しますので、

を取得してください。Relaxerのベータ版は常に、beta.zipというファイル名で配布されていますが、頻繁にバージョンアップされています。動作に疑問がある場合は再度ベータ版をダウンロード、セットアップを行ってから試すといいでしょう。

 サンプルアプリケーションの開発/動作確認は今回もEclipse上で行いますので、そのためのセットアップを行っておきます。第4回ではRelaxer Eclipse Pluginを使いましたが、RelaxerはAntのタスクとしても実行できます。今回はこちらの方法を試してみるので、プラグインのセットアップは必要ありません。また、データベースへの接続部分にJakarta Commons DBCPを使いましたので、アーカイブをEclipseのプロジェクトから参照する設定も行いました。

 なお、これから紹介するサンプルは次の環境で動作を確認しています。

  • JDK 1.4.1_06(Linux版)
  • Relaxer 1.1b(20040405)
  • PostgreSQL 7.4.2
  • Eclipse 2.1.3

Eclipseのセットアップ

1. Javaプロジェクト作成(例:elfプロジェクト)

 ファイル → 新規 → プロジェクト → Java(左ペイン) →
 Javaプロジェクト(右ペイン) → 次へ → プロジェクト名(elf) → 終了

2. Javaのビルド・パス設定

 パッケージ・エクスプローラーでプロジェクト(elf)選択 →
 右クリック → プロパティー → Javaのビルド・パス(左ペイン) →
 ライブラリー選択 → 外部JARの追加 →
   commons-dbcp-1.1.jar、commons-pool-1.1.jar、
   JDBCドライバ(postgresql.jarなど)のアーカイブを追加する

3. フォルダ作成

ソース・フォルダ
 パッケージ・エクスプローラーでプロジェクト(elf)選択 →
 右クリック → 新規 → ソース・フォルダー → フォルダー名(src) → 終了

スキーマ用フォルダ
 パッケージ・エクスプローラーでプロジェクト(elf)選択 →
 右クリック → 新規 → フォルダー → フォルダー名(schemas) → 終了

XML文書用フォルダ
 パッケージ・エクスプローラーでプロジェクト(elf)選択 →
 右クリック → 新規 → フォルダー → フォルダー名(docs) → 終了

 次ページでは、サンプルアプリケーションの設計を行います。(次ページに続く)

  1/3 Page 2

 Index
連載 役に立つXMLツール集(7)
RelaxerでオブジェクトをRDBにマッピング
O/RマッピングツールとしてのRelaxer
Relaxer JDBCとは
Relaxerの入手とサンプル実行環境のセットアップ
  サンプルアプリケーションの設計
  サンプルアプリケーションの実装
まとめ&サンプルダウンロード
参考サイト


「連載 役に立つXMLツール集」


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

注目のテーマ

HTML5+UX 記事ランキング

本日月間