2.2.1 Enterprise Beanの種類

アプリケーションサーバで提供しているEJBコンテナでは,次の表に示すEnterprise Beanを実行できます。

表2-3 EJBコンテナで実行できるEnterprise Beanの分類

大分類小分類
Session BeanStateless Session Bean
Stateful Session Bean
Entity BeanBMP(Bean Managed Persistence)
CMP(Container Managed Persistence)
Message-driven Beanなし

ここでは,それぞれのEnterprise Beanの特徴について説明します。

<この項の構成>
(1) Session Bean
(2) Entity Bean
(3) Message-driven Bean

(1) Session Bean

Session Beanは,クライアントからのセッション単位に生成され,クライアントが終了すると消滅するEnterprise Beanです。Session Beanのライフサイクルが,ユーザがシステムの利用を開始してから終了するまでの範囲内を超えることはありません。Session Beanは状態管理をするかどうかによって,Stateless Session BeanとStateful Session Beanに分類されます。

(a) Stateless Session Bean

セッションの状態を管理しないモデルです。クライアントからの1セッションはBeanのビジネスメソッドの1回の呼び出しで完結させる必要があります。

(b) Stateful Session Bean

セッションの状態を管理するモデルです。EJBコンテナが状態管理をします。クライアントからの1セッションがEJBの複数のビジネスメソッドを呼び出す場合でも,ビジネスメソッドの呼び出し間で状態が保存されます。

(2) Entity Bean

Entity Beanは,エンティティを表現し,データベースに保存(永続化)されることを前提としています。そのため,クライアントが終了してもEntity Beanの状態はデータベースに存在し続けます。Session Beanと比較してライフサイクルが長いEnterprise Beanです。EJB仕様では,次の二つの管理モデルを規定しています。

(a) BMP(Bean Managed Persistence)

Enterprise Beanのビジネスメソッド内でデータの永続化を管理するモデルです。データベースへの接続,SQLの組み立てや実行などの処理は,Enterprise Beanの開発者が実装しなければなりません。

(b) CMP(Container Managed Persistence)

EJBコンテナがデータの永続化を管理するモデルです。データベースへの接続とデータの保存はEJBコンテナによって実行されるので,Enterprise Beanのビジネスメソッドで実行する必要はありません。Enterprise Bean内のデータと格納先データベースのテーブルおよびカラムの対応をEJBコンテナが提供する方法で定義します。一方,接続先データベースのホスト名やポート番号などの接続情報をリソースアダプタまたはデータソースに定義します。EJBコンテナは,これらの定義情報を参照してSQL文を組み立て,接続先データベースのテーブルにデータの参照および格納をします。

なお,EJB 2.0で追加されたCMP 2.0では,EJB QLによって,使用するデータベースに依存することなく,データベースの検索処理をSQLのような構文でDDに記述できます。また,Entity Bean同士に関連を持たせるCMR(Container-managed relationship)によって,Entity Bean間の関連をDDで設定し,EJBコンテナで管理できます。

アプリケーションサーバで提供するEJBコンテナのCMP機能でのEntity BeanのJavaデータ型とデータベースのSQLデータ型の対応については,「2.4.2 CMPフィールドとデータベースのマッピング」を参照してください。

(3) Message-driven Bean

Message-driven Beanは,JMSと連携するメッセージ駆動タイプのBeanです。EJBコンテナはJMSのDestinationからのJMSメッセージ受信を契機にBeanを起動します。Session BeanまたはEntity Beanと異なり,ホームインタフェース,コンポーネントインタフェースを持たないため,クライアントから直接呼び出されません。

Message-driven Beanは,EJB 2.0の場合とEJB 2.1以降の場合で実装するインタフェースが異なります。

EJB 2.0とEJB 2.1以降では,それぞれ対応するConnectorのバージョンが異なります。EJBとConnectorのバージョンの対応を次の表に示します。

表2-4 EJBとConnectorのバージョンの対応

EJBのバージョンConnectorのバージョン
Connector 1.0Connector 1.5
EJB 2.0×
EJB 2.1以降
(凡例)
○:Cosminexus Reliable MessagingまたはTP1/Message Queue - Accessから送信されたメッセージを受信できる。
◎:任意の形式のリスナインタフェースを使用して送信されたメッセージを受信できる。
×:該当するリソースアダプタから送信されたメッセージを受信できない。

また,EJB 2.0とEJB 2.1以降では,次の表に示す機能差があります。

表2-5 EJB 2.0とEJB 2.1以降の機能差

機能EJB 2.0EJB 2.1以降
Connector 1.0の機能を使用する場合Connector 1.5の機能を使用する場合
接続できるリソースアダプタConnector1.0仕様に準拠したリソースアダプタ。Connector1.0仕様に準拠したリソースアダプタ。Connector 1.5仕様に準拠し,Inboundが定義されているリソースアダプタ。
使用できるEIS
  • Cosminexus Reliable Messaging
  • TP1/Message Queue - Access
  • Cosminexus Reliable Messaging
  • TP1/Message Queue - Access
Connector 1.5をサポートする任意のEIS(JMSを含みます)。
キューの定義方法キュー定義ファイルに定義します。キュー定義ファイルに定義します。リソースアダプタのDD(ra.xml)内の管理対象オブジェクトに定義します。
JMSのバージョンJMS1.0.2bJMS1.0.2bJMS1.1
メッセージリスナでのコネクションの管理方法アプリケーションの属性(pooled-instance)に指定します。Message-driven Beanのmethod-readyプールと同じになります。アプリケーションの属性(pooled-instance)に指定します。Message-driven Beanのmethod-readyプールと同じになります。使用するリソースアダプタによって異なります。
注※
Cosminexus Reliable MessagingまたはTP1/Message Queue - AccessはConnector 1.5仕様に対応していないため,Connector 1.5の機能は使用できません。