Java™ プロジェクトまたは EJB プロジェクトを作成したら、
セッション Bean、エンティティー Bean、およびメッセージ駆動型 Bean を作成し、プロジェクトに追加することができます。
エンタープライズ Bean
エンタープライズ Bean は、他のリソースと結合して Java アプリケーションを作成することが Java コンポーネントです。 エンタープライズ Bean には、エンティティー Bean、セッション Bean、およびメッセージ駆動型 Bean の 3 つのタイプがあります。
すべての Bean は、Enterprise Java
Beans (EJB) コンテナーに含まれます。
このコンテナーは、Bean と、Bean があるアプリケーション・サーバー間のインターフェースを提供します。
EJB 3.1 仕様では、EJB 1.1 スタイルのエンティティー Bean の使用は推奨されていません。
Java Persistence API (JPA) 仕様の目的は、
推奨されないエンタープライズ Bean を置き換えることです。
JPA の置換はエンティティー・クラスと呼ばれるので、エンティティー・エンタープライズ Bean と混同しないようにしてください。
JPA エンティティーはエンタープライズ Bean ではないので、EJB コンテナーで実行する必要はありません。
EJB 3.0 および 3.1 の Bean を Web 3.0 プロジェクトに作成することもできます。
コンポーネント定義の注釈
コンポーネント定義の注釈を使用して、セッション Bean、メッセージ駆動型 Bean、および JPA エンティティーのいずれかのタイプのエンタープライズ Bean を作成することができます。
コンポーネント定義の注釈 @Stateful、@Stateless を組み込むことは、クラスがセッション Bean クラスであることを示します。コンポーネント定義の注釈 @Singleton を組み込むことは、クラスが singleton クラスであることを示します。コンポーネント定義の注釈 @MessageDriven を組み込むことは、クラスがメッセージ駆動型 Bean クラスであることを示します。コンポーネント定義の注釈と @Entity を組み込むことは、クラスが JPA エンティティーであることを示します。
- セッション Bean: EJB 3.1 仕様で開発されたセッション Bean には、少なくとも、Bean クラスが必要です。
- 「ステートフル」: ステートフル・セッション Bean は、複数のメソッド呼び出しとトランザクショ
ンにわたって、クライアント固有のセッション情報、または会話型状態を維持します。 ステートフル・セッション Bean のインスタンスには、作成時にコンテナーが割り当てる固有の ID があります。
- ステートレス: ステートレス・セッション Bean は、会話型状態を維持しません。
ステートレス・セッション Bean のインスタンスは、会話型状態を持っていません。
ステートレス・セッション EJB は会話型状態を維持しないので、クライアントと EJB 間で交換されるデータはすべて、
EJB ビジネス・メソッド・インターフェースで宣言された、入力パラメーターまたは戻り値のいずれかとして受け渡しする必要があります。
ステートレス・セッション Bean のすべてのインスタンスは、コンテナーが割り当てる同じオブジェクト ID を持っています。
- Singleton: singleton セッション Bean (EJB 3.1 で新たに追加) は、新しい種類のセッション Bean で、1 つの特定の Java 仮想マシン (JVM) の 1 つのアプリケーションに対して必ず 1 回だけインスタンス化されます。
singleton は、ステートレス・セッション Bean と似た機能を提供しますが、ステートレス・セッション Bean のプールではその中のいずれのものもクライアント要求に応答する可能性があるのに対して、クライアント・アプリケーション毎に 1 つの singleton セッションしか存在しない点が異なります。ステートレス・セッション Bean のように、singleton セッション Bean は Web サービス・エンドポイントを実装できます。
singleton セッション Bean は、クライアント呼び出し間で独自の状態を維持しますが、サーバーの異常終了やシャットダウンを越えてもそれぞれの状態を維持する必要はありません。
- メッセージ駆動型 Bean: メッセージ駆動型 Bean は、
Java Message Service (JMS)
からの非同期メッセージの処理をサポートすることを目的として、EJB 2.0 で導入されました。
EJB 2.1 仕様は、メッセージ駆動型 Bean が JMS だけではなくあらゆるメッセージング・システムをサポートできるように、メッセージ駆動型 Bean の定義を拡張します。
最も簡単に言えば、メッセージ駆動型 Bean とは、そのコンテナーから呼び出すことのできるメッセージ・コンシューマーです。
メッセージ駆動型 Bean は、メッセージが到着すると、コンテナーによって呼び出されます。
メッセージ Bean は、EJB を呼び出すためのもう 1 つの対話メカニズムですが、セッション Bean と異なり、
メッセージの受信時に EJB を呼び出すのは、クライアント (または別の Bean) ではなく、コンテナーです。
- Java Persistence API (JPA) を使用するエンティティー:
エンティティーは、Java EE 5 プラットフォームの一部である、
新規の Java Persistence API を使用します。
コンテナー管理パーシスタンス (CMP) を使用する EJB コンポーネントと異なり、
新規の API を使用するエンティティー・オブジェクトは、コンポーネントではなくなり、
単なる Java オブジェクトです。
このため、エンティティーは軽量化され、プログラミング・モデルは使いやすくなります。
JPA について詳しくは、JPA の資料を参照してください。
EJB 開発のガイドライン
EJB 3.1 はフレキシブルでシンプルなプログラミング・モデルを提供しますが、ここでは、
EJB の開発にあたって推奨される規則をいくつか説明します。
- 各エンティティーは POJO でなければならず、クラスは具象的でなければなりません (つまり、抽象的であったり、最終的であってはなりません)。
- クラスには、引数なしのコンストラクターが必要です。何もない場合、
コンパイラーはデフォルトのコンストラクターを追加します。
- POJO は少なくとも 1 つの POJI (Plain Old Java Interface) を実装する必要があります。インターフェースを含める必要があるわけではありませんが、ローカル・クライアントとリモート・クライアントで別々のインターフェースを含めることができます。
- ビジネス・インターフェースに @Remote 注釈が含まれている場合、インターフェースで宣言されるすべてのパラメーターは、
java.io.Serializable を実装する必要があります。
- セッション EJB は POJO をサブクラス化できますが、別のセッション EJB をサブクラス化することはできません。
以下のいずれかの方法で、エンタープライズ Bean
を作成することができます。
- ウィザードを使用して新規エンタープライズ Bean を作成する。
- Java EE 注釈を使用して新規エンタープライズ Bean を作成する。
- EJB JAR ファイルからエンタープライズ Bean をインポートする。