例えば、EJB 3.0におけるSession Bean(ビジネス・ロジックを実行するためのEJBコンポーネント)は、アノテーションを用いて以下のようなスタイルで記述される。
@Session public class CalculatorBean { public int add(int a, int b) { return a + b; } public int subtract(int a, int b) { return a - b; } }
このように、@Sessionというアノテーションをクラス宣言の行頭に入れておくことで、ごく普通のJavaクラスに対してSession Beanとしての能力(トランザクション管理やセキュリティ管理、リソース管理など)を後付けできる。この際、従来のEJB開発の面倒さを象徴していたホーム・インターフェイスやリモート・インターフェイス、XMLベースのDD(Deployment Descriptor)の作成作業は、すべて不要となる。
また、これまでのDD中に記述していた設定情報は、アノテーションを通じてJavaクラスそのものに記述する。EJB 3.0では大半の設定項目にデフォルト値が用意されるため、開発者は微調整したい部分にのみアノテーションを記述すればよい。例えば、分散オブジェクトによる通信機能が必要であれば、そのときだけ@Remoteというアノテーションを追加する。
EJB 3.0におけるDependency Injectionの例を1つ紹介しよう。例えば、EJB 2.1以前のEJBコンポーネントにおいて、DataSource?(データベースに接続するためのオブジェクト。コネクション・プーリングやトランザクション管理機能を提供する)を利用するには、JNDI APIを用いたオブジェクト検索や例外のキャッチといった冗長なコーディングが必要であった。これに対し、EJB 3.0では以下のように記述することでDataSource?を取得できる。
@Session public class MyBean { private DataSource customerDB; @Inject private void setCustomerDB(DataSource customerDB) { this.customerDB = customerDB; } }
ここで、メソッドsetCustomerDBにおいて用いられている@Injectというアノテーションは、「このメソッドを通じてDataSource?を注入してほしい」という指示をEJBコンテナに伝えるためのものだ。これにより、上述したJNDIプログラミングを省略でき、POJOとしての純粋さ、再利用性の高さを維持できるのである。
すなわち、Javaクラスのアクセサ・メソッドに対しアノテーションを施すことで、そのフィールドとデータベース上のテーブル―カラム間の値が自動的に同期されるというメカニズムだ。このように、POJOをそのままEntity Beanとして扱うことができれば、従来のEJB開発でWeb層とのデータ交換に利用されてきたDTO(Data Transfer Object)パターンはもはや不要となる(実のところ、J2EEパターンの多くはEJBの使いにくさを緩和するために生み出されたアンチパターンであるという見方もある)。
新しいEJB QLでは、副SELECT文やアウタージョイン、複数行のバッチ更新、さらにはネイティブSQLの発行などがサポートされると予想されている。
もっとも、EJB 3.0が実際に利用可能になるのはまだ先の話である。6月にはパブリック・レビューを迎え、その後J2EE 1.5と併せて2005年には最終リリースされる予定である。よって、同仕様に準拠したJ2EEサーバ製品が提供され始めるのもその時期になると見込まれる。