ステートレスセッションBeanでの実装
EJB 3という選択肢
これまでEJB 1.xまたはEJB 2.xを適用・実装してきたアーキテクトや開発者の皆さんは、EJB開発の煩雑さを理解されていることでしょう。これは「第1回:EJBのすべてを知る」で解説したEJBの歴史的背景があるからです。
さて、これからEJBに触れようとしている皆さんは、このような過去を振り返る必要はありません。過去の評判ではじめからEJBを要件定義から外していないでしょうか。これは早合点というものです。
「企業レベルのサーバサイドアプリケーション、トランザクションシステムというものはそう簡単に実現できるものではない」ということは、実際に開発に携わっている皆さんがよくご存知だと思います。この煩雑な仕組みを提供し、性能や機能を担保するものがミドルウェアと呼ばれるソフトウェアです。
これまでトランザクション処理モニタ、メッセージ指向ミドルウェア(MOM)、CORBAなどの多くのミドルウェアの歴史があり、多くの企業システムを支えてきました。言い換えると多くの企業はこのミドルウェアに対して、今でも対価を支払い続けているのです。
これらのミドルウェア分野でのエキスパートが終結して策定され続けているのが、Java EE仕様であり、EJBの仕様です。現時点では、これらミドルウェアのノウハウの集大成がJava EEの仕様であるといっても過言ではないでしょう。このノウハウが凝縮された仕様のコアであるEJB 3を自ら外すことはありません。
EJBコンテナ
再度おさらいになりますが、EJBコンテナはコンポーネントであるEJBの実行環境であり、言い換えると実行フレームワークです。このコンセプトは当初の仕様から継承され続けて、コンテナではコンポーネントから利用できるサービスを提供しています。これらのサービスがこれまでのミドルウェアで培ってきた技術群となっています。以下にEJBコンテナサービスを示します。
サービス | 内容 | 主なアノテーション |
---|---|---|
トランザクション | 宣言型トランザクションによりグローバルトランザクションを実現 | @TransactionManagement |
@TransactionAttribute | ||
セキュリティ | 実行者を制限 | @DeclareRoles @RolesAllowed |
@RunAs | ||
リモート通信 | 異なるマシン(Java仮想マシン)からの呼び出しが可能 | @Remote |
@WebService | ||
インターセプタ | メソッドの前後に処理を割り込ませることが可能 | @Interceptors |
@AroundInvoke | ||
タイマー | メソッド実行のスケジュール制御 | @Timeout |
会話状態管理 | クライアントの会話情報を保持 | @Stateful |
メッセージング | メッセージングシステムとの統合で非同期通信を実現 | @MessageDriven |
永続化 ※1 | オブジェクトの永続化 | @Entity |
これらのサービスのほとんどがアノテーション定義で利用することが可能です。なおアノテーションとはJavaのコードにメタデータを記述するためにJava SE 5.0に追加された言語仕様です。
EJBコンテナを利用していれば、これらのサービス実現のために多くのコードを記述しデバッグしたり別のフレームワークを探し出して利用することができるので、改めて他のサービスを購入する必要はありません。つまりPOJO(Plain Old Java Object)にアノテーションを付与するだけでEJBが完成し、同時にこれらのリッチなサービスが利用できるのです。