![]() |
![]() |
|
Loading
|
@IT > Java開発からO/Rマッピングを取り除くCachéが“POJO”を取り込んでさらに進化した! |
![]() |
|
O/Rマッピング不要でオブジェクトを永続化できるデータベースとして、Java開発者から支持されているCaché。2006年11月に正式リリースされた「Jalapeño(ハラペーニョ)テクノロジ」によって、CachéはJava開発者にとって一層便利なデータベースに生まれ変わった。POJOサポートによって何が変わったのか、具体的に見ていこう。
Java開発者の大きな悩みの1つに、オブジェクトの永続化におけるインピーダンスミスマッチがある。これはオブジェクト指向の開発言語であるJavaによって定義された永続クラスを、リレーショナル・データベース(以下、RDB)に格納したり復元する際に生じる、データモデルの不整合のことだ。 この問題は、近年オブジェクト指向開発が広く普及するにつれてクローズアップされてきた。Javaに代表されるオブジェクト指向の開発言語が主流となっている現在、RDBが不動の地位を維持していることは難しくなりつつある。とはいえ現実には、データベースの主流はいまだにRDBという状況があるのも、まぎれもない事実だ。 この溝を埋めるため、Java開発者はオブジェクトとRDB双方のデータをマッピングする作業を余儀なくされている。このO/Rマッピングは困ったことに、開発者にとっては単調で退屈きわまりない作業であり、同時にプロジェクトマネジメントの観点からは、開発生産性の足を引っ張る大きな要因となってきた。O/Rマッピングの工数は、ときに全コーディング量の60〜70%にも上るといわれるほど。いかに開発の現場の重い負担になっているかが想像できよう。 HibernateといったO/Rマッピング用のツールも登場しているが、完全に自動化できるわけではなく、またRDBを対象としている限りデータ構造の変更が生じるとすべて作り直しとなるなど、インピーダンスミスマッチの解消にはわずかな効果しか期待できない。
こうしたオブジェクトとRDBの不整合は、マッピングという「異種を異種」に変換するステップがある限り消えることがない。であれば、究極の解決策として、この変換をすることなく、オブジェクトをそのままデータベースに格納/取り出しできる仕組みを考えればよい。そうした発想の基に誕生したのがオブジェクト指向データベース(以下、OODB)である。 OODB製品の中でもインターシステムズの提供する「Caché(キャシエ)」は、単なるOODBの領域を超えた幅広い機能を持つ「多次元データベース」であり、SQLが使用でき、かつ、従来のRDBの限界を超えたデータハンドリングを可能にすることから「ポスト・リレーショナルデータベース」とも呼ばれている。 Cachéの大きな特長の1つに、パフォーマンスの大幅な向上が挙げられる。データを2次元の表で表現しなければならない従来のRDBと異なり、Cachéでは多次元配列にデータを格納する仕組みになっている。“スパース配列”と呼ばれるこの多次元配列では、データはすべて“まばらな”多次元配列に格納されている(下記の@IT記事に詳細な解説がある)。このため複雑な親子関係にあるオブジェクト型のデータを、いちいち2次元の表形式に変換する必要がなく、ありのままのオブジェクトとしてデータベースに収めることが可能だ。オブジェクトを単純にシリアライズしてストレージに格納する従来型のOODBと違って、スパース配列に効率よくデータを格納するので、従来のOODBより高いパフォーマンスを発揮する。
CachéにJavaからアクセスする場合、これまではCaché内で永続クラスを定義し、そこからJavaプロキシ(代理=Cachéクラスを投影させたJavaのクラス定義)を自動作成する。このプロキシをJavaのプログラムから利用してCachéにデータを格納することによって、Javaのプログラム空間とOODBとしてのCachéデータストレージ空間を透過的に融合できるアーキテクチャになっていた。 だがO/Rマッピングを霧消させたCachéにも、開発者から見た場合に気になる点はあった。Javaからデータベースにアクセスするには、ある程度Caché独自の開発手法を習得する必要があったのだ。O/Rマッピングほどの手間はかからないが、Cachéで永続クラスをコーディングする必要はあった。
もっと手軽にCachéを利用したいというJava開発者の声に応えて、2006年11月に正式リリースされたのが、CachéにおけるPOJOサポート「Jalapeño(ハラペーニョ)テクノロジ」である。この新しいテクノロジについて、インターシステムズジャパン株式会社 テクニカルコンサルティング&教育サービス部 部長の佐藤比呂志氏に伺ってみよう。
「POJOというのは、最近のJavaに関する話題では必ずといっていいほど出てくるキーワードです。これは“Plain Old Java Object”の頭文字を取ったものですが、なぜあえてこうした素朴なプログラミング手法への回帰が叫ばれているのかというと、その背景には今日のEJB(Enterprise JavaBeans)に代表されるJ2EEが複雑化し過ぎていて、あまり使いこなせていないという事実があります。それをもっと単純にして、開発現場で使えるようにしましょうというのがPOJOの発想なのです」。 では、POJOの思想を採り入れたJalapeñoテクノロジとは、いったいどういうものだろうか。一言でいうと、「CachéセントリックからJavaセントリックへの進化」(佐藤氏)だという。 上でも説明したように、これまでJavaからCachéへアクセスする際には、まずCaché側でクラス定義を作成して、そこからJavaのプロキシクラスを生成して、という2段階を踏んでいた。つまり、あくまでCachéありきの構造になっていた=Cachéセントリックだったのである(図1)。
「Cachéの定義を作成するには、開発者がCachéの専用開発ツール(IDE)を使って手作りする必要がありました。そこからJavaプロキシの生成はツールで自動化されているのですが、その手前に当たるステップだけは手作業だったのです」(佐藤氏)。これを行うために、ある程度はCachéの独自の開発手順を習得しなくてはならなかった。 「Jalapeñoのアプローチは、従前のCachéありき、つまりCachéの開発環境がないとコーディングできない不便さを解消する試みなのです」と佐藤氏は語る。JavaセントリックなJalapeñoでは、開発者はあくまでもJavaの世界にとどまったままでCachéを利用できるようになった(図2)。
では、実際にどのような方法を取るのか、具体例を紹介しよう。
まずJalapeñoを利用して、POJO定義からCachéクラスを作成し、コンパイルする方法を紹介しよう。開発者は通常のJavaコードの中で、永続化したいクラスに対してアノテーション(注釈)を加える(リスト1)。
アノテーションはJDK 5.0で採用された機能で、プログラムの動作には影響を与えずにメタデータを付加するもの。Jalapeñoテクノロジは、アノテーションを利用してCachéオブジェクトモデルについてのメタデータを付加する。Cachéは注釈付きのJavaクラス定義に基づいて、永続性のあるCachéクラスを生成、コンパイルする機能(スキーマ・ビルダ)を持っており、リスト1をコンパイルするとリスト2のCachéクラスが生成される。
次に、Cachéに格納された永続オブジェクトに接続する場面を紹介する。従来のJavaプロキシクラスの利用とは異なり、Jalapeñoテクノロジではオブジェクトマネージャを使用してデータベースに接続し、Cachéクラスのインスタンスを作成して検索・更新といった処理を行う(リスト3)。
さて、Jalapeñoの具体像を理解できただろうか。Jalapeñoテクノロジの登場によって、Javaによるアプリケーション開発がいっそう簡素化されたことは、Java開発者にとって大きな福音といえる。 「これまで存在したO/Rマッピングツールは、例えばHibernateにしても、生成した後でもXML定義ファイルをメンテナンスするという手間がありました。O/Rマッピングツールによる自動化である程度の工数は稼げますが、結局はどこかで追加の手間がかかっていたのです。それがJalapeñoではJavaの世界から透過的にCachéデータベースにアクセスできるようになり、開発者はJavaのことだけに集中していればよくなったのです」(佐藤氏)。 深い階層構造を持つデータでは、既存のRDBに対するCachéの優位性はさらに際立ってくると佐藤氏はいう。「RDBは複雑な階層構造のクラスを複数の表にマッピングするので、オブジェクトを参照するときには複数の表を結合しないといけない、つまり複数のディスクI/Oが発生するわけです。しかしCachéの多次元モデルの中では親、子、孫という関係をひとかたまりのデータとして持てるので、I/O負荷の見地からも圧倒的に有利です。また、Cachéでは階層構造に変更があってもデータベースの設計変更は最小で済みます」。 もともとO/Rマッピング不要で、しかもデータ構造の変更に強いというアドバンテージに、今回の「Jalapeñoテクノロジ=完全なマッピングの自動化」が加わって、ますますOODBの中でCachéを選択するメリットは高まったといってよいだろう。 提供:インターシステムズジャパン株式会社
企画:アイティメディア 営業局 制作:@IT編集局 掲載内容有効期限:2006年12月16日 |
|