Apache Software Foundationに,DB Apache Projectという新しいプロジェクトが開始されたのをご存知だろうか。

 DB Apache Projectは,以前から様々なApache内のプロジェクトで開発されていた,データベース関連ソフトウエアを集約し,このプロジェクト内にて開発・管理するために開始された。これにより,重複開発の軽減とソフトウエアの再利用性の向上が見込めるようになった。

 執筆時現在 Apache DBプロジェクトでは,TorqueObJect Relational Bridge (以下,OJB)という2つのJavaのソフトウエアが開発されている。両者ともJavaプログラムからデータベースへアクセスするためのツールである。

EJB(EntityBean)と同様な機能を,より軽く提供する

 Javaプログラムからデータベースへのアクセスを行う場合,  

  • JDBC APIを直接利用する  
  • EJBのEntityBeanを利用する

    といった方法が考えられる。

     JDBC APIを直接利用する方法は,オブジェクトとその関連を,RDBのテーブルとリレーションにマッピングしなければならず,Javaのオブジェクトをそのまま永続化(データベースに格納)するというイメージとは,はほど遠いプログラミングとなる。一般的にインピーダンス・ギャップと呼ばれている問題である。さらには,SQL文をJavaプログラム中に記述するため,RDBソフトウエアごとの微妙な差異の影響で,プログラムのポータビリティを著しく低下させてしまう。

     一方,EJBのEntityBeanを利用した場合,Javaのオブジェクトをそのまま保存するイメージで永続化処理が行え,オブジェクト指向の世界とシームレスにRDBを繋げることが可能である。しかし,EntityBeanはEJBコンテナを必要とするためJ2EEアプリケーションでしか利用できないばかりか,JDBCを直接利用した場合に比べると,アクセス速度が遅いという問題もある。どちらも一長一短である。

     Javaからのデータベースへのアクセス手段としては,上記以外に  

  • Object Relational(O/R)マッピング・ツールを利用する

    という方法がある。

     O/Rマッピングとは,リレーショナル・データベースのテーブルおよびカラムをクラスと属性に対応付け,Javaプログラムからはそのクラスを操作することで,データベースへのアクセスを行うというものである。

     O/Rマッピングは決して新しい手法ではない。EJB(Enterprise Java Beans)の一種であるEntityBeanのCMP(Container-managed persistence)も同様のO/Rマッピング手法をとる。しかし,前述のようにEntityBeanはEJBコンテナ(EJB対応アプリケーション・サーバー)を必要とする。EJBを使用しなくとも,このO/Rマッピングの機能だけを提供するツールが,O/Rマッピング・ツールだ。

     Apache DB プロジェクトが開発している TorqueとOJBもO/Rマッピング・ツールである。これらのソフトウエアを紹介する前に,O/Rマッピング・ツールについてもう少し詳しく説明する。

    DBをオブジェクトとして,SQL文を書かずに扱える

     O/Rマッピング・ツールはSQLの知識がなくともデータベースへのアクセスが可能となる環境を提供する。O/Rマッピング・ツールの歴史は古く,これまでに様々なツールが公開されてきた。これらほとんどのO/Rマッピング・ツールは,前述のようにリレーショナル・データベースをオブジェクトとしてアクセスするための機能を提供している。ツールによっては,リレーショナル・データベース以外(XMLやプレーンテキストなど)も永続化の仕組の対象としている。

     ここで一つ重要な機能がある。ほとんどすべてのO/Rマッピング・ツールでは,利用するプログラム中からは,永続化の仕組みが何であるかを意識しなくてよいということである。即ち,永続化するシステムの差異はO/Rマッピング・ツールが吸収してくれるのだ。これは,SQLを記述しなくて良いだけでなく,データベースシステムのSQLの微妙な違いさえ意識しなくてよいということを意味する。

     例えば,データベースを用いるパッケージを開発していた場合など,永続化システムごとにパッケージを用意する必要があったが,O/Rマッピング・ツールを利用すれば,これらをまったく意識せずに利用することが可能となる。

     同様の事は,EntityBean(CMP)にも言えるが,O/Rマッピング・ツールとの大きな違いは,前述したようにその動作環境にある。EntityBeanはEJBコンテナ(アプリケーションサーバー)を必要とするが,O/Rマッピング・ツールはそれを必要としない。即ちシンプルなJavaアプリケーションでも利用可能ということである。また,EntityBeanがその構造上,データベースへのアクセス速度に問題があるのに対して,大抵のO/Rマッピング・ツールは,非常に高速にデータベースへアクセスすることができる。

     このように素晴らしい機能を提供するツールだが,すべてにおいてEntityBeanより優れている訳ではない。多くのO/Rマッピング・ツールは,トランザクション制御のための手段は提供しているが,EJBのようなトランザクション制御機能(分散トランザクションや,自動トランザクション制御)を提供していない。また,ネットワーク分散もサポートしておらず,用途によってはEntityBeanの利用が最適な場合もある。

     EntityBeanとO/Rマッピングは,互いに置き換わる存在でもあるが,同時に,補完するものでもある。EntityBeanはBMPの場合,自身の永続化処理を,記述する必要があるがその時にO/Rマッピング・ツールが利用できる。また,JBossは永続化機能にO/Rマッピング・ツールのHibernateを利用している。

    O/Rマッピングの標準API「JDO(Java Data Object)」

     現在,数多くのO/Rマッピング・ツールが提供されている。最終的な目的(Javaオブジェクトを永続化する)こそ同じであるが,そのAPIはツールごとに異なり,利用する上では非常に不便であった。そこで,米Sun MicrosystemsはO/RマッピングのAPIをJSR-000012 としてJCPで標準化し,Java Data Object(以降,JDOと呼ぶ)を公開した。いくつかの O/Rマッピング・ツールは,このJDOに準拠したAPIを提供している(または,対応中である)。

     TorqueとOJBは,同じ Apache DBプロジェクト内で開発されているが,世に存在する多くのO/Rマッピング・ツールがそうであるように,両者も同じ O/Rマッピング・ツールであるが,その思想や提供する機能が異なる。TorqueはオリジナルのAPIを提供しているのに対し,OJBはJDOなどの標準APIをサポートしている。

    シンプルなアーキテクチャの「Torque」

    図1●Torque
     Torqueは,利用する永続化システムをRDBのみとすることで,シンプルなアーキテクチャで構成されている。また,RDBのテーブルと対応したJavaのクラスを自動生成し,そのクラスオブジェクトをプログラム中で操作することで,インピーダンス・ギャップを埋めるアプローチをとっている。自動生成前に対象となるRDBを設定することで,特定のRDBに対応した SQL文を内包したクラスを生成する仕組みになっている(図1[拡大表示])。

     Torqueが提供するAPIは非常に直感的である。自動生成されたテーブルに対応したクラスのオブジェクトを保存したい場合は,そのオブジェクトがもっている保存用のメソッドを呼び出せばよい。また,検索を行う場合にも検索対象のテーブルに対応したクラスのスタティックメソッドに,検索条件を与えて呼び出すだけで,結果のリストが返却される。リスト内には,検索対象のテーブルの行に対応したオブジェクトが内包されており,RDBをシームレスに操作可能である。

    RDBだけでなくODBやXMLも操作できる「OJB」

    図2●OJBの概要
     一方OJBは,標準APIの採用を積極的に行っている。永続化のOBJの下位レベルAPI以外に,ODMG 3.0に完全対応したAPIを提供し,さらに前述のJDOにも対応を開始している。OJBのアプローチは,Torqueのアプローチとは異なり,ODMGやOJBと同じアプローチをとっている(よって,互換APIが提供しやすい)。具体的には,Torqueのようなクラスの生成は行わず,すべてのマッピング情報をXML形式のファイルに定義し,その定義を参照しながらツールが,永続化システムとのやり取りを行う(図2[拡大表示])。

     プログラムでは,永続化処理を行うためのオブジェクト(PersistenceManager)を中心とし,そのオブジェクトにオブジェクトの保存(データベースへの挿入や更新)や,検索処理を依頼することになる(正確にはPersistenceManagerから取り出せる様々なオブジェクトによって処理を行う)。Torqueが永続化対象のクラスに対して操作を行うのとは,対照的である。

    このようにアプローチが異なる2つのO/Rマッピング・ツールを Apache DBプロジェクトでは開発している。もちろん,APLで配布されているので,興味があれば自由に両者を使って比較してほしい。

     O/Rマッピング・ツール選択のポイントは,  

  • 実績  
  • 対応永続化システム  
  • 速度  
  • 拡張性(SQL文の追加可否)  
  • トランザクション機能の有無  
  • API仕様
    などを考慮し,利用目的にあったソフトウエアを選択すればよい。

     O/Rマッピング・ツールを利用する方法が,すべての場合において最適な方法であるとは思わないが,Javaプログラムからデータベースへのアクセス手段として検討してはいかがだろうか。

    黒住幸光(Kurozumi Yukimitsu)

    ■著者紹介
    黒住幸光(くろずみ ゆきみつ)氏
    株式会社アークシステム シニアコンサルタント。1989年,スーパー・コンピュータ向け言語処理環境の研究中に,生まれて間もないJavaと出会い,Javaに専念するため転職を決意。現在,株式会社アークシステムにてオープンソース・ソフトウエアを用いたWWWシステムの構築,コンサルティングを行うかたわら,雑誌への執筆,StrutsユーザーMLの管理,Ja-JakartaプロジェクトTurbine翻訳の取りまとめなど幅広く活動中。メール・アドレスは,yukimi_2@yahoo.co.jp