BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース エンタープライズJPA、Fetch Groups、Spring 2.5についてPratik Patel氏が講演

エンタープライズJPA、Fetch Groups、Spring 2.5についてPratik Patel氏が講演

Apache OpenJPA(リンク)フレームワークが提供しているFetchGroupsのようなJPA拡張機能によって、エンタープライズJavaの開発者たちはJavaオブジェクトのグラフにマップされたデータの検索を、より柔軟に行うことができる。Pratik Patel氏は、JPAのAPIとSpring 2.5(リンク)フレームワークを使用して現実世界のJavaアプリケーションを開発するための、JPA(リンク)の設計技術について論じている。彼は先ごろ行われたNo Fluff Just Stuff(NFJS)のCentral Ohio Software Symposiumで(リンク)、エンタープライズJPAとSpringの永続性APIサポートについて発表を行った(リンク)

Pratik氏は、複数の永続ユニット(persistence units:PU)の編成や、永続性の要求にJPAのAPIを使用しているJavaアプリケーションでのパフォーマンスチューニング技術についても語った。Pratik氏はEJB 3.0(リンク)エンティティ(かつてエンティティBeansとして知られていたもの)が「POJOの永続性」の設計思想に基づくJPAを使用していることにふれている。彼は、実際のJPAを機能させるためには、Javaアプリケーションでは「Fetch Groups」のようなベンダ独自の拡張を使用する必要があると述べた。

Springフレームワークのバージョン2.5はJPAの統合(リンク)が優れており、複数の永続ユニットの管理をサポートされている。またJPAの詳細設定の一部(例えばデータソース)をpersistence.xmlから Springの設定ファイルに移動することによって、JPAの設定をもっと柔軟にしている。大きなコードベースをもっと小さなモジュールにするために Springを使用してJPAを設定する場合、開発者は拡張ポイントを使用することができる。さらにSpringのテストモジュール(リンク)は、JPAクラス群の単体テストや統合テストのサポートが優れている(例えばAbstractJpaTestsクラス(リンク))。AbstractJpaTestsクラスはシャドーイング・クラスローダを使用してオンザフライでクラスを強化している。トランザクション周りのそれぞれのテストメソッドはラップされており、ベースのアプリケーションコンテキストを宣言するためのヘルパーも提供されている。SpringのJPAモジュールは、コンテナを使用せずにJPAロジックの単体テストをするために(LocalContainerEntityManagerFactoryBeanを(リンク))提供している。

ロックについて、Pratik氏はJPAの仕様のデフォルトでは楽観ロックであると述べた。開発者は悲観ロックを使用することもできるが、EntityManager(リンク)の lock()またはfind()メソッドを使用してロックマネージャを定義する必要がある。JPAではメモリ上のデータの更新を探知するため、「バージョン」ベースのアプローチも使用している。これには、@Version属性が永続クラスに定義されていて、Versin列がデータベースのテーブルに作成されていなければならない。悲観ロックはスループットへの影響があり、さらに不具合のあるロックからの復旧は難しいため、悲観ロックは避けよう。

Pratik氏は、JPA APIの使い方と、Apache OpenJPAフレームワークが提供している@FetchGroup(リンク)と@FetchPlan(リンク)のアノテーションを使用したパフォーマンスチューニングのデモを行った。彼はフェッチロジックの単体テストや統合テストについても話し、アプリケーションのコードをプロダクションの環境に持ち込んだ際に土壇場で問題が発生するのを避けるため、フェッチグループのコードのテストを勧めた。

JPAのベストプラクティスについて、彼はDAOのモックの実装を減らすため、開発者に(HSQL DBのような)インメモリ・データベースのような技術を検討するように求めている。トレードオフは、インメモリ・データベースに接続すると単体テストの所要時間が少し増えるだろうが、コードや開発の手間は少なくなるだろうことである。他のベストプラクティスとしては、生成されたSQLの評価がある。これによって ORMツールが生成したSQLクエリについて詳細に理解することができる。その他に考慮すべきこととしてはDDLの生成があるが、それは全てのJPA実装は、迅速な開発に利用することのできるDDLの生成を可能にしているからである。JPA APIを永続化に利用する際に他に考慮すべきアイテムとしては、次のものがある。

  • コレクションの並び順(JPAのバージョン2.0では、@OrderColumnと呼ばれる新しいアノテーションが導入される予定である。これは照合列として使用する列を定義するものである。)
  • 同一トランザクション内の後続クエリがフラッシュされていないデータを見ないように、早く頻繁にフラッシュする。
  • Enum - データベースのスピード対読みやすさ。

 別のJPA関連の発表で(リンク)、Pratik氏はJPA Query Language(JPAQL)について論じている。これには自然なオブジェクト指向(Object Oriented:OO)のクエリや大量の更新、削除のような機能がある。JPAQLはJDOQL(リンク)やHQL(リンク)のようなクエリ言語に良く似ているが、HQLに比べると制限がある。遅延ロードには、FETCH JOINのエクスプレッションがマスタテーブルの情報とともに関連付けられた詳細情報をフェッチするのに役立つ。彼は次のようなJPA 2.0仕様(リンク)の新機能についても話した。

  •  「クライテリア」クエリ
  • IntegerやStringなどの)基本的な型のためのコレクション
  • マップのサポートの拡張
  • もっと多くのJPAQLエクスプレッション
  • より優れたロックのサポート

原文はこちらです:http://www.infoq.com/news/2008/08/nfjs2008-jpa-spring-2.5

この記事に星をつける

おすすめ度
スタイル

BT