EJB 3.0 Feature Overview

最近EJB3.0が気になっていたが、JBossのサイトに分かりやすくまとめてあったので翻訳。


EJB 3.0 Feature Overview


EJB3.0の目的は2つある。1)エンタープライズJavaアプリケーションの開発を簡単にすること。2)Java Persistance APIを標準化すること※1。JBossEJB3.0をEnterprise Javaの簡素化の分岐点と見ている。JBossチーフアーキテクトBill BrukeとHibernate設立者のGavin Kingは、JBossを代表してEJB3.0(JSR-220)仕様策定チームに参加した。EJB3.0は、Java Enterprise Editionはもちろん、JBossHibernateの未来にも深い影響を及ぼしている。EJB3.0仕様策定チームはいくつかのドラフトをリリースし、JBossJBoss Application Server上でEJB3.0をテストすることでEJB3.0の動きを捕捉してきた。


EJB3.0には以下に示す主要な特徴がある。


EJB APIの簡素化


EJB3.0は、HomeインターフェースとEJBAPI※2を実装する必要性を排除している。Sesson Bean、Message Driven Bean、Entity Beanは単なるJava Beanとなり、ビジネスロジックの実装に専念できる。Entity Beanは煩わしいインターフェースが不要な標準的なJavaクラスになったが、これはEntity Beanがオブジェクト指向デザイン - 継承、ポリモーフィズム、他のオブジェクト指向の規約 - を適用することができるようになった事を意味する。


アノテーション


EJB3.0はJDK5.0で導入されたアノテーションを取り入れている。アノテーションの導入により、デプロイメントディスクリプタの使用が完全にオプションになる。EJB3.0仕様はBean Type、Dependency Injection、トランザクション、セキュリティ、コールバック、O/Rマッピング、リレーションなど広い範囲のアノテーションを規定している。デプロイメントディスクリプタは、アノテーションを上書きすることを目的として残されている。JBoss Application ServerとHibernateは共にこれらのアノテーションをサポートするが、これにより、Hibernateを使うことによって、EJB3.0アノテーションEJB3.0コンテナの外部のスタンドアロンJavaアプリケーションで活用できる。


Dependency Injection


EJBや関連するリソースををルックアップするのにお決まりのコードは不要になった。@Injectや@EJB、@Resourceアノテーションの導入によって、これらの依存性は、コンテナによって透過的にJava Beanに注入される。


コールバック


開発者が必要に応じてコールバックを実装できるようになった。@PostConstruct、@PreDestroy、@PrePersis、@PostPersitなどのコールバックアノテーションによって、開発者はどんなJava Beanやコールバッククラスメソッドでも、イベント受信時にコールバックさせることができる。


Entity Manager API


Entity Manager APIEJB3.0に導入され、Java Beanインスタンスを永続化対象から切り離し、ローカルでアップデートし、Entity Managerに送信して、databaseに永続化することを可能にすること目的に設計されている。JBoss Application ServerとHibernate共にこの新しいAPIをサポートしている。


永続化の簡易化とクエリの改良


EJB3.0は、このAPIの策定に不可欠な役割を果たしているHibernateによって、Javaの永続化モデルを標準化している。O/Rマッピングと広範囲の関係モデルを扱うためにアノテーションが定義された。EJB3.0EJB-QLを改良し、ダイナミッククエリやサブクエリ、バルクアップデート、バルクデリートをサポートする。


コンテナ外部での使用


EJB3.0使用は、新しいPersistence APIJavaアプリケーションで使用することを可能にしている。JBoss EJB3.0では、Session BeanとMessage Driven Beanを、アプリケーションサーバ外部のスタンドアロンJavaアプリケーション、JUnit Test、Tomcat、更には他のアプリケーションサーバでも使用する事を可能にしている。詳しい情報をはここから。



※1 HibernateTopLink、JDO等Persistence APIが複数存在していることが問題になっていた
※2 ejbCreate()など


EoD、DI、PersistenceAPIが目玉のようだ。
以下、更に知りたいところである。

  • Hibernateを直接使う場合と何が違うのか?
  • EJB3.0のDIでSpringは不要になる?


この辺りは実際使いながら調べていこう。