【レポート】

JavaOne 2006 - Java Persistance API、Dos & Donts

    杉山貴章  [2006/05/20]

    16日(現地時間)より米国サンフランシスコで開催されていた2006 JavaOne Conferenceは、19日に最終日を迎えた。この日ジェネラルセッションの直後に行われたテクニカルセッション「The Java Persistence API in the Web Tier」では、EJB 3.0で新たに追加されたJava Persistence APIとJSF 1.2(JavaServer Faces)をWeb層で組み合わせて利用する方法が紹介された。スピーカーはEJB 3.0仕様のスペックリードであるLinda DeMichiel氏、Strutsの生みの親でありJSF仕様のスペックリードであるCraig McClanahan氏、そしてHibernateやJBoss Seamの生みの親であるGavin King氏の3名。そうそうたる顔触れである。

    図.1 Craig McClanahan氏(左)、Linda DeMichiel氏(中央)、Gavin King氏(右)

    まず、DeMichiel氏がJava Persistence APIの概要を紹介した。Java Persistence APIはEJB 3.0(JSR 220として標準化)から利用することができるようになったBeanオブジェクトの永続化のためのAPIである。これまで永続化に関する主要なAPIとしてはJDO(Java Data Object)とEJB Entity Beanの2種類があり、両者の間に互換性が無いため混乱の元となっていた。Java Persistence APIはJDOとEntity Beanの整合性を取るために新たに設計されたもので、機能的には従来のEntity Beanに相当する、POJOベースのAPIとなっている。

    Java Persistence APIでは様々なアノテーションが用意されており、それによってシンプルにエンティティを表現できるようになっている。例えば、エンティティ自身は@Entityアノテーションで表現し、idは@Idアノテーションを、リレーションシップは@OneToOne、@OneToMany、@ManyToOne、@ManyToManyなどのアノテーションを使用する。

    図.2

    エンティティと関連の集合はPersistence Unitと呼ばれ、これはJava Persistence APIを把握するうえでの重要な概念になっている。またランタイムコンテキストとしてPersistence Contextを利用することができる。その他、Entityを管理するためのEntityManager APIなども付属する。DeMichiel氏はこれらの機能について、簡単なソースコード例を見せながら解説した。

    次にMaClanahan氏がマイクを持ち、JSF 1.2について簡単に説明した。JSFはサーバサイドアプリケーションにおいてユーザインタフェースを作成するためのAPIで、最新版であるJSF 1.2はJSR 252として仕様が定められている。JSFはJavaBeansスタイルのイベント/リスナ機構を持つほか、多彩なUIコンポーネントやコンバータ、バリデータなどが用意されている。また、UIコンポーネントをモデル層やアクションにバインディングするための表記法も用意されている。

    続いて、DeMichiel氏とKing氏よりスレッドモデルとインジェクション、トランザクションなどに関する説明があった。それによれば、EntityManagerなどのステートフルなオブジェクトはスレッドセーフではなく、これらのオブジェクトのいくつかはインジェクション可能であるという。一方それ以外のステートレスなオブジェクトはスレッドセーフであり、こちらはインジェクトする側になるという。したがって前者を後者にインジェクショトしてはいけないという注意がサンプルコードと共に示された。

    図.3 悪いインジェクションの例

    図.4 良いインジェクションの例

    トランザクションについてはJTAトランザクションやリソースローカル・トランザクションなどの種類があるが、これらはEntityManagerがコンポーネント間で伝搬されることや、例外の処理方法が汚いという問題点があるという。そこでContainer-managed EntityManagerやApplication-managed EntityManagerなどを使用する方法が紹介された。その他、セッションではPersistance Contextを独自に拡張する方法などについても紹介されている。

    図.5 Container-managed EntityManagerの例

    図.6 Persistance Contextの拡張例

    最後に、ここまで紹介されてきた内容を適用し、Java Persistence APIとJSFを組み合わせて作成したサーブレット・アプリケーションのデモが行われた。Java Persistance APIによって、Web層に体系立ったメカニズムを導入することが可能になる。Java Persistance APIはJava EE 5に含まれているだけでなく、Java SEにも導入される予定となっているため、その有効性をよくチェックしておく必要があるだろう。

    図.7 デモ画面

    関連記事

    関連サイト

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン