2.2.1 Enterprise Beanの種類
アプリケーションサーバで提供しているEJBコンテナでは,次の表に示すEnterprise Beanを実行できます。
ここでは,それぞれのEnterprise Beanの特徴について説明します。
(1) Session Bean
Session Beanは,クライアントからのセッション単位に生成され,クライアントが終了すると消滅するEnterprise Beanです。Session Beanのライフサイクルが,ユーザがシステムの利用を開始してから終了するまでの範囲内を超えることはありません。Session BeanはStateless Session Bean,Stateful Session Bean,Singleton Session Beanに分類されます。
(b) Stateful Session Bean
セッションの状態を管理するモデルです。EJBコンテナが状態管理をします。クライアントからの1セッションがEJBの複数のビジネスメソッドを呼び出す場合でも,ビジネスメソッドの呼び出し間で状態が保存されます。
(c) Singleton Session Bean
複数のクライアントでセッションの状態を共有するモデルです。アプリケーションに対して,すべてのセッションで共有されるインスタンスが一つ作成されます。アプリケーションに合わせてBeanのライフサイクルを決定する必要があります。
アプリケーションサーバで利用できるSingleton Session Beanの詳細は,「2.19 Singleton Session Beanの利用」を参照してください。
(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の場合は,次のインタフェースを実装します。
-
javax.ejb.MessageDrivenBeanインタフェース
-
javax.jms.MessageListenerインタフェース
-
-
EJB 2.1以降の場合は,次のインタフェースを実装します。
-
javax.ejb.MessageDrivenBeanインタフェース
-
EISが提供する任意のメッセージリスナのインタフェース
-
EJB 2.0とEJB 2.1以降では,それぞれ対応するConnectorのバージョンが異なります。EJBとConnectorのバージョンの対応を次の表に示します。
EJBのバージョン |
Connectorのバージョン |
|
---|---|---|
Connector 1.0 |
Connector 1.5 |
|
EJB 2.0 |
○ |
× |
EJB 2.1以降 |
○ |
◎ |
また,EJB 2.0とEJB 2.1以降では,次の表に示す機能差があります。
機能 |
EJB 2.0 |
EJB 2.1以降 |
|
---|---|---|---|
Connector 1.0の機能を使用する場合 |
Connector 1.5の機能を使用する場合 |
||
接続できるリソースアダプタ |
Connector1.0仕様に準拠したリソースアダプタ。 |
Connector1.0仕様に準拠したリソースアダプタ。 |
Connector 1.5仕様に準拠し,Inboundが定義されているリソースアダプタ。 |
使用できるEIS |
|
|
Connector 1.5をサポートする任意のEIS(JMSを含みます)。※1 |
キューの定義方法 |
キュー定義ファイルに定義します。 |
キュー定義ファイルに定義します。 |
リソースアダプタのDD(ra.xml)内の管理対象オブジェクトに定義します。 |
JMSのバージョン |
JMS1.0.2b |
JMS1.0.2b |
JMS1.1 |
メッセージリスナでのコネクションの管理方法 |
アプリケーションの属性(pooled-instance)に指定します。Message-driven Beanのmethod-readyプールと同じになります。 |
アプリケーションの属性(pooled-instance)に指定します。Message-driven Beanのmethod-readyプールと同じになります。 |
使用するリソースアダプタによって異なります。 |