第1回 JSF・Spring・Hibernateで次世代Javaに備える
Page.1 | Page.2 |
|
EJBコンテナ関連の変更 |
Java EE 5の仕様変更で、最も重要なものがEJB 3.0(JSR-220)です。EJBはエンタープライズレベルのアプリケーションを開発するうえで非常に重要な機能を持っているにもかかわらず、その開発の難しさから敬遠される傾向がありました。XDocletの登場によりEJBの開発そのものは簡単になりましたが、EJBの実装をテストするためにはEJBコンテナにデプロイする必要があるため、動作確認に手間と時間がかかることが問題となっていました。
EJB 3.0では、Session Bean、Entity Bean、およびMessage Driven BeanのすべてをPOJOとして実装することができます。これにより、従来に比べて飛躍的に実装が簡単になると同時に、EJBコンテナを必要とせずに単体テストを実施することができるようになります。
EJB 3.0の仕様の最新版では、以下の3つの仕様書に分割されています。
- EJB 3.0 Simplified API
- EJB 3.0 Persistence API
- EJB Core Contracts and Requirements
1.はEJB 3.0全体にわたってアノテーションによるEJB開発がいかに簡単になるかを示したドキュメントになっています。2.はPOJOになった新しいEntity
BeanとO/Rマッピングについての仕様です。3.は従来のEJB 2.1を含めてコンテナが満たすべき要件を示しています。
■EJB 3.0のアノテーション
従来のSession Beanの実装には、EJB本体以外にホームインターフェイスやリモート/ローカルインターフェイスを実装する必要がありましたが、EJB
3.0のSession BeanはPOJOとして開発することができます。
@Stateless public class MySessionBean
{ |
これはちょうど、XDocletと同様の機能が標準に備わったものと考えていいでしょう。しかし、EJB 3.0の新機能はこれだけではありません。Springフレームワークなどで実現されている、依存性の注入(DI:Dependency Injection)の機能やAOP(Aspect Oriented Programming)の機能が盛り込まれる予定になっています。これらの技術は、アプリケーションのコードをシンプルにし、再利用可能なコンポーネントに保つのに有効に働きます。以下はDataSourceをDAO(Data Access Object)にインジェクションする場合の例です。
@Resource(name="myDB") |
また、EJBの参照をクライアントのオブジェクトにインジェクションすることもできます。
|
いずれの場合も、JNDIをルックアップするコードが一切必要ないことに注意してください。
また、EJB 3.0にはインターセプターという重要な機能が含まれることになっています。インターセプターとはAOPの一種で、特定のビジネス処理にかかわらず、共通の 機能を横断的に適用したいときに有効な仕組みです。インターセプターの例としては、トレース出力、セッション管理、トランザクション管理などが代表的な例です。
図1 インターセプター |
図1に示すように、インターセプターを使用しないビジネスロジックはビジネスロジックとは直接関係のない処理が混在し、ひどく読みにくいものになりがちです。共通の機能をビジネスメソッドのインターセプターとして分離し、自由に組み込める(weaving)ようにすることで、ビジネスメソッドの実装は本来のビジネスロジックに注力した可読性の高いソースコードに保つことができます。EJB
3.0では@Interceptorsによって、任意のメソッドの前処理や後処理を追加することができます。
/** ビジネス・オブジェクト */ /** インターセプター */ |
上記のほかにもCommon Annotations(JSR-250)として有用なアノテーションが定義されています。
DIやインターセプターは、EJBに特化した機能ではなく、もっと汎用的に使われるべきものではないかという疑問を抱く人もいるようです。おそらく、これらの機能は将来的にはJ2SEに含まれるようになると思われます(JMXがJ2SE 5.0から標準のAPIになったことに注意してください)。
■POJOになったEntity Bean
Session Beanと同様Entity BeanもPOJOとして実装できるようになります。EJB 3.0のO/Rマッピングの仕様は、現在オープンソースのパーシステント・レイヤのフレームワークとして最もよく使われているHibernateの仕様と非常によく似たものになっています。これは、JSR-220のエキスパート・グループにHibernateの設計者であるGavin Kingが参加しており、大きな影響力を持っているためです。逆にいえば、これから開発するアプリケーションでは、データベース・アクセスに J2EE 1.4標準のCMPベースEntity Beanを使うよりも、Hibernateを使用した方がJava EE 5へのマイグレーションは行いやすいといえます。
ここで簡単にHibernateとEJB 3.0 Entity Beanの類似点を紹介しておきます。
- HibernateのSessionのAPIは、EJB 3.0のEntityManagerのAPIで代用可能である
- HibernateのO/Rマッピングの概念の多くは、EJB 3.0に引き継がれている
− IDジェネレータ
− 単方向関連(one-to-many、 many-to-one、 many-to-many)
− バリュー・タイプ(コンポーネント型オブジェクト)
− インヘリタンス
- EJB-QLでは、HibernateのHQLと同様の名前付きパラメータが使える
また、最新のトピックスとしては2005年6月末に開催されたJavaOneの会期中に公開されたJSR-220のPR版では、データベースの入出力をPOJOでやりとりするEntityManagerをEJBコンテナの外でも利用可能にすることが仕様化されました。これは、Entity Beanの単体テストを容易にするだけでなく、EntityManagerを軽量コンテナとして利用する新しい使い道が登場することを示唆しています。例えば、SwingをインターフェイスとするPIMデータベース管理のスタンドアロン・アプリケーションなどが考えられます。
このように、Java EE 5はEoDを目指した非常に魅力的な開発環境になることが分かります。その一方で、これから開発しようとするアプリケーションの資産がJava EE 5でも、再利用できるかどうかも心配になります。しかし、安心してください。J2EE 1.4の現状であっても、JSF、Spring、Hibernateを組み合わせたアーキテクチャを採用することにより、Java EE 5と同等のPOJO、DI、インターセプター、POJOベースのパーシスタンスを利用した再利用可能なコンポーネントを開発することができます。
次回は、JSF、Spring、Hibernateを組み合わせたアーキテクチャの詳細について解説します。
2/2 |
INDEX |
||
第1回 JSP・Spring・Hibernateで次世代Javaに備える | ||
Page1 Java EE 5仕様の構成 Webコンテナ関連の仕様 |
||
Page2 EJBコンテナ関連の仕様 |
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|