編集部注:読者の貴重なご指摘により一部コンテンツを削除・改編させていただきました。内容に不備があったことをお詫び申し上げます(2010年7月8日)
ほとんどのWebアプリケーションを開発するときは、DBとのアクセスが発生します。ここではデータアクセスの技術について取り上げます。Javaにおけるデータアクセス技術には以下のようなものがあります。
JDBCは、Javaプログラムからリレーショナルデータベース(RDB)にアクセスするためのAPIです。SQLを発行することによってDBを操作します。使用するときはDBごとに「JDBCドライバ」と呼ばれるモジュールが必要です。
JDK 6の新機能として追加されたSQLデータベース機能です。もともとApacheプロジェクトで開発されていた「Apache Derby」というデータベースが名前を変えてJavaに搭載されました。従来のクライアントからアクセスするだけでなく、ライブラリからDBにアクセスも可能です。
元はEJB 3.0の一部として開発されたRDBをO/RマッピングするAPIです。Java SEおよびJava EEに搭載されている機能です。
EJB 3.0以前に永続化のためのAPIとして存在していたJDO(Java Data Objects)とEJB Entity Beanに互換性がなかったため、整合性を取るためのAPIとして開発されました。オブジェクトとDBの関係はアノテーションで記述できます。XMLファイルとして別に切り出すことも可能です。「JPQL(Java Persistence Query Language)」と呼ばれるSQLに似た言語で処理を行います。
JPAの実装はさまざまなプロジェクトでも行われており、O/Rマッピングフレームワークとして有名なHibernateプロジェクトによるJPAの実装である「Hibernate Entity Manager」などもあります。O/Rマッピングフレームワークはほかにも「Seasar2」のサブコンポーネントである「S2Dao」や、Apache DBプロジェクトの「Torque」などもあります。
一方.NETには、DBを扱うアプリケーション開発のために、さまざまなケースに応じた技術があります。.NETではデータアクセスに関する機能を総称して「ADO.NET」と呼びます。
ADO.NETの機能には、以下のようなものがあります。
従来型のDBアクセスの手段で、明示的にDBとの接続を確立し、コマンドを実行して処理が終わるまでDBとの接続が維持されます。そのため、「接続型」と呼ばれます。
接続型データアクセスはデータへのリクエスト数が多い場合や、重たい検索処理を実行した場合に、長時間DBを占有します。この問題を解決するために非接続型データアクセスがあります。非接続型データアクセスは、一度アクセスしたデータを「DataSet」と呼ばれるオブジェクトにデータを格納します。データを読み込んだら、DBとの接続を切断します。DataSetに対して処理を行うため、直接データベースにはアクセスしません。
.NET Framework 3.5から「LINQ」「LINQ to SQL」というデータアクセスの技術が提供されました。LINQはクエリをSQLのようにプログラム言語に埋め込んで処理できます。LINQ to SQLはSQL Serverのデータに対してLINQを使うことのできる技術です。
LINQは、DataSetやコレクション、XMLなどのデータストアに対して統一的に処理できます。LINQの内部で各データストアに最適なクエリを実行してくれるので、クエリ式を.NET Frameworkに対応しているプログラミング言語で記述できます。
ADO.NET Entity FrameworkはDBからアプリケーションが使用するために必要なエンティティを定義して、データを扱うことのできるフレームワークです。そしてEntity Frameworkに対してもLINQを使用でき、「LINQ to Entities」と呼ばれています。Entity Frameworkを使用するためには「EDM(Entity Data Model)という概念モデルを使用します。
このEDMは以下の3つの要素から構成されています。
これらの要素はXMLで記述されており、エンティティを扱うCSDL、DBとのマッピング情報を持つSSDL、そしてMSLがCSDLとSSDLの定義をマッピングします。EDMは継承や多対多を表現できるのも大きな特徴です。
さらに、Visual Studio 2010に用意されている「Entityデザイナ」というツールで、GUIベースで開発可能です。またEntity Frameworkには、ほかにも必要時に暗黙的にデータを読み込む遅延ロードや、DB固有の機能を利用するNative SQLのサポートなどの機能があります。
Dynamic DataはLINQ to SQLかEDMを用いて作成したデータ・モデルをベースに、自動でCRUD(Create(作成)/Read(読み取り)/Update(更新)/Delete(削除))機能を持ったアプリケーションを構築できます。非常に効率的ですが、LINQ to SQLとEDMの制約で1レコードずつしか処理ができない制限があります。
今回は、アプリケーション開発のための技術を中心にご紹介しました。Javaも.NETもまだまだ進化しており、今後はさらにユーザーエクスペリエンスを高める技術が充実するでしょう。
クライアントサイド開発ではJavaの技術も進化して、速度も高速化し安定してきました。しかしデスクトップアプリケーションの分野では、大きなシェアを持つ.NETが優位でしょう。
サーバサイド開発では、Javaがテクノロジの充実や、プラットフォームに依存しないことを一因に広く普及しています。仕様も公開されているので、オラクル(旧サン・マイクロシステムズを含む)だけでなくオープンソースのコミュニティなどでもさまざまなツールやフレームワークが開発されています。
一方、.NETもWeb開発やデータベース開発などで、さまざまな分野のフレームワークが提供され、Visual StudioやExpressionを利用することで高い生産性を期待できるということで急速にシェアを広げています。
次回は、通信技術やほかのシステムとの連携、また技術以外の側面からコミュニティなどについて紹介したいと思います。
Copyright © ITmedia, Inc. All Rights Reserved.