Javaから見た.NET
連載インデックスへ
第2回

設計者/SEが覚えておきたいJavaと.NETの違い


株式会社クロノス
高山 智史
2010/7/6
編集部注:読者の貴重なご指摘により一部コンテンツを削除・改編させていただきました。内容に不備があったことをお詫び申し上げます(2010年7月8日)

Javaのデータアクセス技術

 ほとんどのWebアプリケーションを開発するときは、DBとのアクセスが発生します。ここではデータアクセスの技術について取り上げます。Javaにおけるデータアクセス技術には以下のようなものがあります。

JDBC(Java DataBase Connectivity)

 JDBCは、Javaプログラムからリレーショナルデータベース(RDB)にアクセスするためのAPIです。SQLを発行することによってDBを操作します。使用するときはDBごとに「JDBCドライバ」と呼ばれるモジュールが必要です。

Java DB

 JDK 6の新機能として追加されたSQLデータベース機能です。もともとApacheプロジェクトで開発されていた「Apache Derby」というデータベースが名前を変えてJavaに搭載されました。従来のクライアントからアクセスするだけでなく、ライブラリからDBにアクセスも可能です。

JPA(Java Persistence API)

 元は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のデータアクセス技術

 一方.NETには、DBを扱うアプリケーション開発のために、さまざまなケースに応じた技術があります。.NETではデータアクセスに関する機能を総称して「ADO.NET」と呼びます。

 ADO.NETの機能には、以下のようなものがあります。

接続型データアクセス

 従来型のDBアクセスの手段で、明示的にDBとの接続を確立し、コマンドを実行して処理が終わるまでDBとの接続が維持されます。そのため、「接続型」と呼ばれます。

非接続型データアクセス

 接続型データアクセスはデータへのリクエスト数が多い場合や、重たい検索処理を実行した場合に、長時間DBを占有します。この問題を解決するために非接続型データアクセスがあります。非接続型データアクセスは、一度アクセスしたデータを「DataSet」と呼ばれるオブジェクトにデータを格納します。データを読み込んだら、DBとの接続を切断します。DataSetに対して処理を行うため、直接データベースにはアクセスしません。

LINQ to SQL

 .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

 ADO.NET Entity FrameworkはDBからアプリケーションが使用するために必要なエンティティを定義して、データを扱うことのできるフレームワークです。そしてEntity Frameworkに対してもLINQを使用でき、「LINQ to Entities」と呼ばれています。Entity Frameworkを使用するためには「EDM(Entity Data Model)という概念モデルを使用します。

 このEDMは以下の3つの要素から構成されています。

  • CSDL(Conceptual Schema Definition Language:概念)
  • MSL(Mapping Schema Language:マッピング)
  • SSDL(Storage Schema Definition Language:論理)

 これらの要素はXMLで記述されており、エンティティを扱うCSDL、DBとのマッピング情報を持つSSDL、そしてMSLがCSDLとSSDLの定義をマッピングします。EDMは継承や多対多を表現できるのも大きな特徴です。

 さらに、Visual Studio 2010に用意されている「Entityデザイナ」というツールで、GUIベースで開発可能です。またEntity Frameworkには、ほかにも必要時に暗黙的にデータを読み込む遅延ロードや、DB固有の機能を利用するNative SQLのサポートなどの機能があります。

ASP.NET Dynamic Data

 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を利用することで高い生産性を期待できるということで急速にシェアを広げています。

 次回は、通信技術やほかのシステムとの連携、また技術以外の側面からコミュニティなどについて紹介したいと思います。

@IT関連記事


「Javaは遅い」から「Javaは楽しい」に至る歴史
小山博史のJavaを楽しむ(12) 
最新のJava実行環境は起動が速いドラッガブルアプレットなど楽しい機能が満載です。ここまで至るには、いろいろな出来事がありました……
Java Solution」フォーラム 2008/12/15
典型的なアプリケーションのパターン(前編)
連載:アプリ・アーキテクチャ・ガイド2.0解説(5)
 アプリケーション種別ごとにアーキテクチャ設計を説明。今回はWebアプリ、RIA、リッチ・クライアント・アプリについて説明
Insider.NET」フォーラム 2009/10/16
AzureのストレージをJavaで扱えるWindowsAzure4j
ユカイ、ツーカイ、カイハツ環境!(14) 
AzureストレージサービスのデータをJavaから参照・更新・削除するプログラムや、そのための無料Eclipseプラグインの使い方を紹介
Java Solution」フォーラム 2010/4/15
EclipseでJavaとXAML/WPFをつなぐフレームワーク
JavaにおけるRIAの選択肢の1つとして.NETを使う!? 
開発者もデザインを要求されるRIA時代、Java開発者はどうするべきか? 答えの1つとして無料のフレームワークを紹介
Java Solution」フォーラム 2008/3/27
J2EEと.NET連携の意義を考える
J2EEと.NET連携を考える(1)
J2EEと.NETは対立するものではなく共存するものだ。その連携の意義を考えるとともに、実際の連携例を3回にわたって解説する
Java Solution」フォーラム 2003/12/18
Javaシステムで.NETテクノロジを採用する理由とは?
事例研究:J2EEシステムへの.NET導入事例
 NECは大規模Javaシステムの1機能として.NETを採用した。希望する要件を満たすプラットフォームを選定していった結果だという
Insider.NET」フォーラム 2005/3/5

1-2-3-4

 Index
第2回 設計者/SEが覚えておきたいJavaと.NETの違い
  Page1
プログラマが知っておきたい両者の違いは前回で
Javaのクライアントサイド技術(GUI開発)
  Page2
.NETのクライアントサイド技術(GUI開発)
クライアントアプリをユーザーに配布する技術
さらに、リッチクライアント/RIAを比較
  Page3
Javaのサーバサイド技術(Webアプリ開発)
.NETのWebアプリ開発
Page4
Javaのデータアクセス技術
.NETのデータアクセス技術
今後もユーザーエクスペリエンスを高める技術が充実



Java Solution全記事一覧

TechTargetジャパン

Java Solution フォーラム 新着記事

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

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH