Java2 Enterprise Editionの基礎知識 |
|
EJBには、大きく分けるとEntity BeanとSession Bean があります。さらに、Entity Beanは、CMP Entity Bean と、BMP Entity Beanに、Session Beanは、Stateless Session Beanと、Stateful Session Beanに分けられます。
■Entity Bean
Entity Beanは、「永続化されたデータそのもの」を表すBeanです。「データ」の実体となりうるものは、幾つか考えられますが、分かりやすい例を挙げると、データベースを対象にした場合、テーブルの1レコードが、Entity
Beanの1インスタンスに対応していると考えることができます。ですから、各インスタンスを識別するために、Entity Beanにはプライマリ・キーを持たせることができ、さらに、Entity
Beanの内容が変更されると、対象となるデータベースのレコードも内部で自動的に更新(永続化)されるため、EJBサーバを終了させても、データが消滅することはありません。
Entity Beanは、さらにその内容から、CMP Entity Beanと、BMP Entity Beanに分類されます。
■CMP Entity Bean
CMP Entity BeanのCMPとは、Container Managed Persistence の略で、永続化に関する処理を、EJBコンテナが行うという意味になります。ですから、CMPの場合、開発者はリソース(データベースなど)へのアクセスのためのコードを書く必要がなく、あたかも一般的なプロパティを持ったBeanであるかのように記述するだけで、リソースとのやりとりはすべてEJBコンテナが行ってくれます。
■BMP Entity Bean
BMP Entity BeanのBMPとは、Bean Managed Persistenceの略で、永続化に関する処理を、Bean自身が行うという意味になります。ですから、リソースへのアクセスコードは、すべて開発者が記述する必要があります。当然、実装はCMPよりも面倒になりますが、その代わり適用範囲が広く自由度も高くなります。
■CMPとBMPの使い分け
EJBのスタンスを考えたとき、上の記述だけを見れば、CMPを使用すべきなのは明らかです。CMPであれば、リソースの種類の違いはすべてEJBコンテナの側で吸収してくれますし、いちいちアクセスコードを書かずに済みますので、コーディング量も削減できます。では、BMPが必要な場面は実際にあるのでしょうか? 実は、現在のEJBの仕様では、CMPの適用範囲には制限が多く、CMPだけでは扱えないリソースが多いのです。そのため、CMPでは扱えないリソースには、BMPを使ってアクセスするしかない、ということになります。具体的には、CMPは単一のテーブルしか扱えず、キーの扱いにも制限があります。マスタ保守などの用途ならばともかく、業務系のデータベースの場合、複数のテーブルを組み合わせて使用することが非常に多いことを考えても、とてもCMPだけでは対応できません(注:EJB2.0(次期バージョン)では、CMPの機能に拡張が加えられる予定です)。
■Session Bean
Session Beanは、主にビジネスロジックを実行するためのBeanです。Entity Beanとは異なり、Bean自身の情報が、永続化されることはなく、「セッション」単位での処理を記述することから、こういう名称になったと思われます。ですから、EJBサーバが終了すると、Beanの状態も破棄されてしまいます。
Session Beanは、さらにその内容から、Stateless Session Beanと、Stateful Session Beanに分類されます。
■Stateless Session Bean
Stateless Session Beanは、その名のとおり、状態を保持しないBeanで、Beanのインスタンスの生成・消滅は、すべてEJBコンテナが独自に管理しています。ですから、同じBeanのメソッドを続けて呼び出した場合にも、それらが同じインスタンスである保証はありません。そのため、Stateless
Session Beanでは、内部状態を保持して、複数メソッドで連続した処理を行うことはできず、1メソッドで完結するような処理を記述するのに向いています。
■Stateful Session Bean
Stateful Session Beanは、内部的な状態の保持を行うことのできるBeanで、一般的なクラスのインスタンスとほぼ同じ感覚で使用することができます。Stateless
Session Beanとは異なり、BeanはHome Interfaceからの生成によってインスタンス化された後は、メソッドの呼び出しごとに生成、消滅することはありませんので、セッション単位で連続した処理を行うのに向いています。
「Java Solution FAQ」 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|