12 Enterprise JavaBeans (EJB)
Enterprise JavaBeans (EJB)は、EJBテクノロジを実装するJava EEコンポーネントです。EJBは、Oracle WebLogic Server内のランタイム環境であるEJBコンテナで実行されます。EJBコンテナは、トランザクションやセキュリティなどのシステム・レベルのサービスを、アプリケーション開発者には意識させることなく、その中にデプロイされているEJBに提供します。これらのサービスを使用すると、トランザクション対応のJava EEアプリケーションのコアを形成するEJBを迅速に構築してデプロイできます。
この章の内容は次のとおりです。
EJBの理解
EJB 3.2テクノロジは、コンポーネントベースのビジネス・アプリケーションを開発およびデプロイするためのサーバー側コンポーネント・アーキテクチャです。EJBテクノロジを使用することで、Java EE 7テクノロジに基づいて、安全でポータブルな分散トランザクション・アプリケーションを迅速かつ容易に開発できます。
EJB 3.2の仕様では、プログラミングおよびパッケージ化モデルの変更が簡素化されています。前のバージョンのJavaインタフェースを使用する必要がなくなり、プレーンな従来型Javaオブジェクトに注釈付けし、EJBコンポーネントとして使用できるようになりました。EJBモジュールをWebアプリケーションの内部に直接配置できるようになり、簡素化はさらに進みました。これにより、WebコンポーネントおよびEJBコンポーネントを格納するアーカイブを作成して、それらをEARファイルに結合する必要がなくなりました。
この項の内容は次のとおりです。
WebLogic ServerでのEJBドキュメント
WebLogicサーバーでのEJBの使用に関する詳細は、次のドキュメントを参照してください:
-
EJB 3.2の新機能の詳細は、『Oracle WebLogic Serverの新機能』の「Java EE 7のサポート」を参照してください。
-
WebLogic Serverでの3.2 EJBのプログラミング、パッケージ化およびデプロイ手順については、『Oracle WebLogic Server Enterprise JavaBeansの開発』を参照してください。
-
分割ディレクトリ環境でのWebLogic Server EJBの整理および構築については、『Oracle WebLogic Serverアプリケーションの開発』を参照してください。
-
2.x EJBのプログラミングとパッケージ化の詳細は、『Oracle WebLogic Server Enterprise JavaBeansバージョン2.1の開発』を参照してください。
その他のEJB情報
エンタープライズBeanの利点、エンタープライズBeanの種類、ライフサイクルなどのEJBの概念についてさらに学習するには、次のWebサイトを参照してください。
-
Enterprise JavaBeans 3.2仕様(JSR-318)(
http://jcp.org/en/jsr/summary?id=318
) -
Java EE 7チュートリアル(
https://docs.oracle.com/javaee/7/tutorial/partentbeans.htm#BNBLR
)の「エンタープライズBean」の章
セッションEJBによるビジネス・ロジックの実装
セッションBeanは、ビジネス・ロジックを実装します。セッションBeanインスタンスは、一度に1つのクライアントにサービスを提供します。セッションBeanには、ステートフル、ステートレス、およびシングルトンの3種類があります。
セッションBeanの種類とセッションBeanを使用するタイミングの詳細は、Java EE 7のチュートリアルのセッションBeanの内容に関する項を参照してください。
ステートフル・セッションBean
ステートフル・セッションBeanは、特定のクライアントとの対話を反映する状態情報をメソッドやトランザクションをまたがって維持します。ステートフル・セッションBeanは、クライアントと他のエンタープライズBeanの対話を管理するか、ワークフローを管理できます。
例: 社員が個人のプロファイル情報を表示して更新できる、ある会社のWebサイトでは、ステートフル・セッションBeanを使用して様々な他のBeanを呼び出し、ユーザーがページ上で「データの表示」をクリックした後に、次のようなユーザーが必要とするサービスを提供できます。
-
JSPからログイン・データを受け取り、ログイン・データを検証する別のEJBを呼び出す。
-
認可の確認をJSPに送信する
-
認可されたユーザーのプロファイル情報にアクセスするBeanを呼び出す
ステートレス・セッションBean
ステートレス・セッションBeanは、呼出し間でセッションやクライアントの状態の情報を格納しません。唯一格納されることのある状態はクライアントに固有のものではなく、キャッシュされたデータベース接続や別のEJBの参照などです。ステートレス・セッションBeanが状態を格納できるのは、長くてメソッド呼出しの期間だけです。メソッドが完了すると、状態情報は維持されません。
ステートレス・セッションBeanのインスタンスはすべて、任意のクライアントにサービスを提供できます - どのインスタンスも同等です。ステートレス・セッションBeanは、ステートフル・セッションBeanよりもパフォーマンスが優れています。その理由は、各ステートレス・セッションBeanが複数のクライアントをサポートできるからです(ただし一度に1つ)。ステートレス・セッションBeanのクライアントは、Webサービス・エンドポイントにできます。
例: 訪問者が問合せ先リンクをクリックして電子メール送信できるインターネット・アプリケーションでは、ステートレス・セッションBeanを使用して、JSPによってユーザーから収集された送信先と送信元の情報に基づいて電子メールを生成できます。
シングルトン・セッションBean
シングルトン・セッションBeanが提供する正式なプログラミング構成により、特定のJava仮想マシン(JVM)内のアプリケーションごとにセッションBeanがインスタンス化され、そのアプリケーションのライフサイクルに存在することが保証されます。シングルトンにより、エンタープライズBeanコンポーネントの複数のインスタンス間、またはアプリケーション内の複数のエンタープライズBeanコンポーネント間で、容易に状態を共有することができます。
シングルトン・セッションBeanはステートレス・セッションBeanと同様の機能を提供します。ただし、ステートレス・セッションBeanではそのプールでクライアント要求に応答するのに対して、シングルトン・セッションBeanはアプリケーションごとに1つしかありません。シングルトン・セッションBeanは、ステートレス・セッションBeanと同様に、Webサービス・エンドポイントを実装できます。シングルトン・セッションBeanではクライアントの呼出し間でその状態を保持しますが、サーバーのクラッシュまたは停止時にはその状態を保持する必要はありません。
例: 中央カウンタ・サービスを提供するインターネット・アプリケーション。ステートレス・シングルトンBeanは、Javaクライアントからコールされ、クライアントが複数回呼び出されると、カウントがそのたびに1ずつインクリメントされます。
メッセージドリブンBeanによる疎結合ビジネス・ロジックの実装
メッセージドリブンBean (MDB)は、リクエストにすぐにレスポンスする必要がない疎結合(非同期)のビジネス・ロジックを実装します。メッセージドリブンBeanは、JMSキューまたトピックからメッセージを受信し、そのメッセージの内容に基づいてビジネス・ロジックを実行します。それは、EJBとJMSの間の非同期インタフェースです。
MDBインスタンスはそのライフサイクルを通じて、同時にではありませんが複数のクライアントからのメッセージを処理できます。特定のクライアントの状態は維持されません。メッセージドリブンBeanのインスタンスはすべて同じ機能であり、EJBコンテナはどのMDBインスタンスにもメッセージを割り当てることができます。コンテナは、それらのインスタンスをプールしてメッセージのストリームの並行処理を可能にします。
EJBコンテナは、必要に応じてBeanのインスタンスを作成し、JMSメッセージをインスタンスに渡すことによってメッセージドリブンBeanと直接対話します。コンテナは、デプロイメント時にBeanのインスタンスを作成し、メッセージのトラフィックに基づいて作動時にインスタンスを追加および削除します。
『Oracle WebLogic ServerメッセージドリブンBeanの開発』を参照してください。
例:顧客から注文を受けるプロセスがサプライヤへの発注プロセスを引き起こすオンライン・ショッピング・アプリケーションでは、サプライヤへの発注プロセスをメッセージドリブンBeanで実装できます。顧客の注文が必ずサプライヤへの発注につながる一方で、そのステップは疎結合になります。その理由は、顧客の注文を確定する前にサプライヤへの発注を生成する必要はないからです。関連するサプライヤへの注文が発行される前に顧客の注文が「蓄積」されるのは問題なく、有益なことです。
EJBの構造と環境
EJBを開発するには、EJBクラス、ビジネス・インタフェースおよびヘルパー・クラス用のファイルを用意する必要があります。EJBの環境には、EJBコンテナと、オプションで1つ以上のデプロイメント記述子ファイルが含まれます。
次の各項では、各Beanタイプで必須のクラス、EJBのランタイム環境、およびBeanのランタイムの動作を管理するデプロイメント記述子ファイルについて簡単に説明します。
EJBのコンポーネント
Beanの構造はBeanタイプによって異なります。表12-1では、各タイプのEJBを構成するクラスと、そのクラス・タイプの用途を定義しています。
ノート:
EJB 2.1以前のAPIでは、ローカルおよびリモート・クライアントが、セッションBeanのローカルまたはリモート・ホームおよびローカルまたはリモート・コンポーネント・インタフェースによって、ステートフルまたはステートレス・セッションBeanにアクセスする必要がありました。これらのインタフェースはEJB 3.xでも使用し続けることができますが、EJB 2.1のリモートおよびローカル・クライアント・ビューは、シングルトン・セッションBeanではサポートされません。
詳細は、『Oracle WebLogic Server Enterprise JavaBeansバージョン2.1の開発』のEJBのクラスとインタフェースの作成に関する項を参照してください。
表12-1 EJB 3.1のコンポーネント
EJBのコンポーネント | 説明 | ステートレス・セッション | ステートフル・セッション | シングルトン・セッション | MDB |
---|---|---|---|---|---|
リモート・ビジネス・インタフェース |
リモート・ビジネス・インタフェースは、ビジネス・ロジックをリモート・クライアント(EJBとは別のアプリケーションで動作するクライアント)に公開します。リモート・クライアントから呼び出せるビジネス・メソッドを定義します。 |
はい |
はい |
はい |
いいえ |
ローカル・ビジネス・インタフェース |
ローカル・ビジネス・インタフェースは、ビジネス・ロジックをローカル・クライアント(EJBと同じアプリケーションで動作しているクライアント)に公開します。ローカル・クライアントから呼び出せるビジネス・メソッドを定義します。 |
はい |
はい |
はい |
いいえ |
ローカル・インタフェースなし |
インタフェースなしのビューはローカル・ビューの1つで、個別のビジネス・インタフェースを使用せずに、Beanクラスのパブリック・メソッドが公開されます。 |
はい |
はい |
はい |
はい |
Beanクラス |
Beanクラスはビジネス・ロジックを実装します。 |
はい |
はい |
はい |
はい |
EJBコンテナ
EJBコンテナとは、アプリケーション・サーバーにデプロイされたBeanの実行時コンテナです。このコンテナはアプリケーション・サーバーの起動時に自動的に作成され、Beanと次のような実行時サービスの間のインタフェースとして機能します:
-
ライフサイクル管理
-
コード生成
-
セキュリティ
-
トランザクション管理
-
ロックと同時実行性制御
組込み可能なEJBコンテナ
従来のJava EEサーバーベースの実行とは異なり、組込み可能なものを使用することで、クライアント・コードとそれに対応するエンタープライズBeanを同じ仮想マシンおよびクラス・ローダー内で実行できます。これにより、テスト、オフライン処理(バッチ・ジョブなど)、およびデスクトップ・アプリケーションのEJBプログラミング・モデルの使用に対するサポートが向上します。
Java EEサーバーのエンタープライズBeanコンテナに存在するほとんどのサービスは、注入、コンテナ管理のトランザクションおよびセキュリティを含め、組込みエンタープライズBeanコンテナで使用できます。エンタープライズBeanコンポーネントは組込みでもJava EE環境でも同様に実行されるため、同じエンタープライズBeanをスタンドアロンおよびネットワーク・アプリケーションの両方で容易に再利用できます。
組込みEnterprise Beanコンテナの詳細は、Oracle WebLogic Server Enterprise JavaBeansの開発のOracle WebLogic Serverでの組込みEJBコンテナの使用を参照してください。
EJBメタデータ・アノテーション
WebLogic Server EJB 3.2プログラミング・モデルでは、Java EE 7メタデータ・アノテーション機能を使用して、アノテーション付きEJB 3.2 Beanファイルを作成します。次に、WebLogicコンパイル・ツールweblogic.appc
(またはこれと同等のAntタスクwlappc
)を使用してBeanファイルをJavaクラス・ファイルにコンパイルし、必須のEJBインタフェースやオプションのデプロイメント記述子など、関連するEJBアーティファクトを生成します。
『Oracle WebLogic Server Enterprise JavaBeansの開発』のアノテーション付きEJBクラスのプログラミングに関する項を参照してください。
オプションのEJBデプロイメント記述子
EJB 3.0以降では、EJBデプロイメント記述子ファイル(ejb-jar.xml
など)を作成する必要がなくなりました。ただし、必要に応じて、引き続きXMLデプロイメント記述子を使用することはできます。競合がある場合、デプロイメント記述子の値がアノテーションの値をオーバーライドします。
EJB実装で引き続きデプロイメント記述子を使用する場合は、『Oracle WebLogic Server Enterprise JavaBeansバージョン2.1の開発』のEJBデプロイメント記述子に関する項を参照してください。
WebLogic ServerのEJB 2.xには、次の3つのデプロイメント記述子があります。
-
ejb-jar.xml
—標準Java EEデプロイメント記述子です。Beanはすべてejb-jar.xml
で指定する必要があります。ejb-jar.xml
では、一緒にデプロイされる複数のBeanを指定できます。 -
weblogic-ejb-jar.xml
—クラスタリング、キャッシング、トランザクションといったWebLogic Serverの機能と関連する要素を格納するWebLogic Server固有のデプロイメント記述子。このファイルは、BeanがWebLogic Server固有の機能を利用する場合は必須です。ejb-jar.xml
と同じように、weblogic-ejb-jar.xml
では、一緒にデプロイするBeanを複数指定できます。 -
weblogic-cmp-jar.xml
- エンティティBeanのコンテナ管理による永続性に関連する要素を格納するWebLogic Server固有のデプロイメント記述子。コンテナ管理による永続性を使用するエンティティBeanは、weblogic-cmp-jar.xml
ファイルに指定する必要があります。
WebLogic Server EJB 2.xデプロイメント記述子の詳細は、Oracle WebLogic Server Enterprise JavaBeansバージョン2.1の開発のデプロイメント記述子スキーマおよび文書型定義リファレンスを参照してください。
EJBのクライアントと通信
このトピックには、次の項があります。
EJBへのアクセス
クライアントは、インタフェースなしのビューまたはビジネス・インタフェースを介してエンタープライズBeanにアクセスします。エンタープライズBeanのインタフェースなしのビューでは、エンタープライズBean実装クラスのパブリック・メソッドをクライアントに公開します。エンタープライズBeanのインタフェースなしのビューを使用しているクライアントは、エンタープライズBean実装クラスまたはその実装クラスの任意のスーパークラスの任意のパブリック・メソッドを呼び出すことができます。ビジネス・インタフェースは、エンタープライズBeanのビジネス・メソッドを含む標準のJavaプログラミング言語インタフェースです。
エンタープライズBeanのクライアントは、エンタープライズBeanのインスタンスへの参照を取得します。そのためには、Javaプログラミング言語のアノテーションで依存関係インジェクションを使用するか、エンタープライズBeanインスタンスを検索するJNDI構文を使用してJNDIルックアップを実行します。
エンタープライズBeanインタフェースを取得する最も簡単な方法は、依存関係インジェクションです。Java EEサーバー管理対象の環境、JavaServer Faces Webアプリケーション、JAX-RS Webサービス、その他のエンタープライズBean、またはJava EEアプリケーション・クライアントの中で実行されるクライアントは、javax.ejb.EJB
アノテーションを使用した依存関係インジェクションをサポートします。
Java SEアプリケーションなど、Java EEサーバー管理対象の環境外で実行されるアプリケーションは、明示的ルックアップを実行する必要があります。JNDIでは、Java EEコンポーネントを識別して明示的ルックアップを単純化するグローバル構文をサポートします。詳細は、Oracle WebLogic Server Enterprise JavaBeansの開発のEJBクライアントへのアクセスのプログラミングを参照してください。
ネットワークのオーバーヘッドのため、Beanにはリモート・クライアントからアクセスするよりも同じマシン上のクライアントからアクセスする方が効率的であり、クライアントが同じアプリケーションにあればさらに効率的です。
クライアントからEJBへのアクセスをプログラミングする方法の詳細は、Java EE 7のチュートリアルのエンタープライズBeanへのアクセスに関する項を参照してください。
EJBの通信
WebLogic Server EJBは、次のプロトコルを使用します。
-
T3 - リモート・オブジェクトとの通信に使用します。T3は、Remote Method Invocation (RMI)プロトコルを実装するWebLogic独自のリモート・ネットワーク・プロトコルです。
-
RMI - リモート・オブジェクトとの通信に使用します。RMIを使用すると、アプリケーションはネットワークの他のどこかにあるオブジェクトの参照を取得し、同じJVMでクライアントと共存しているかのようにそのオブジェクトのメソッドをクライアントの仮想マシンからローカルで呼び出すことができます。
リモート・インタフェースのあるEJBはRMIオブジェクトです。EJBのリモート・インタフェースは、
java.rmi.remote
を拡張します。WebLogic RMIの詳細は、『Oracle WebLogic Server RMIアプリケーションの開発』を参照してください。 -
HTTP - EJBは、
java.net.URL
リソース接続ファクトリを使用してWebLogic Server環境外のWebサーバーとのHTTP接続を取得できます。『Oracle WebLogic Server Enterprise JavaBeansバージョン2.1の開発』のリクエストをURLに送信するようにEJBを構成する方法に関する項を参照してください。
EJBが使用するネットワーク接続の属性は、EJBをWebLogic Serverカスタム・ネットワーク・チャネルにバインドすることによって指定できます。『Oracle WebLogic Serverサーバー環境の管理』のネットワーク・リソースの構成に関する項を参照してください。
EJBのセキュリティ
また、セキュリティ・ロールを作成し、ロールにユーザーをマッピングするには、WebLogic Server管理コンソールでセキュリティ・レルムを更新します。詳細は、『Oracle WebLogic Server管理コンソール・オンライン・ヘルプ』のセキュリティ・ロールの管理に関する項を参照してください。
セキュリティとEJBの詳細は、次を参照してください。
-
認証、認可など、セキュリティ関連の基礎的な情報については、Oracle WebLogic Serverセキュリティの理解のセキュリティの基礎を参照してください。
-
WebLogicセキュリティ・サービスによるアプリケーションの開発のEnterprise JavaBeans (EJB)の保護では、EJBの認証と認可を構成する手順について説明されています。
-
『Oracle WebLogic Serverロールおよびポリシーによるリソースの保護』には、WebLogic Server管理コンソールを使用してEJBの認証と認可を構成する手順が含まれています。
WebLogic ServerでのEJBのためのロードマップ
WebLogic Serverのドキュメント・セットには、WebLogic Server環境における、EJBの開発、デプロイおよび保護の方法の理解に役立つ、いくつかの入門的なトピック、手順的なトピック、リファレンス的なトピックがサンプルとともに含まれています。
表12-2 WebLogic ServerでのEJBのためのロードマップ
主要なタスク | サブタスクと追加情報 |
---|---|
EJB 3.1の理解 |
|
単純なEJBサンプル |
|
反復的EJB開発 |
|
アノテーション付きEJBクラスのプログラミング |
|
EJBデプロイメントのガイドライン |
|
Oracle WebLogic Serverでの組込みEJBコンテナの使用方法 |
|
Oracle WebLogic Serverでの永続性プロバイダの構成 |
|
リファレンス |
|
EJB 2.xについて |