17 EJBおよびJPAコンポーネントを使用した開発
この章の内容は次のとおりです。
EJBおよびJPAコンポーネントを使用した開発について
JDeveloperには、EJBプロジェクト、エンティティ、永続性ユニット、セッションBeanおよびメッセージドリブンBeanを作成するためのウィザードが用意されています。
JDeveloperには、EJBプロジェクト、エンティティ、永続性ユニット、セッションBeanおよびメッセージドリブンBeanを作成するための段階的ウィザードが用意されています。オンライン・データベース定義またはオフライン・データベース定義およびアプリケーション・サーバーのデータソース接続からエンティティを構築できます。また、JPAおよびTopLinkテクノロジとシームレスに統合できるため、完全な永続性パッケージを実現することもできます。
EJBバージョンおよび機能のサポート
JDeveloperはEJB 3.xをサポートしています。EJB 3.1仕様でサポートされる機能と、EJB 3.0と以前のバージョンとの違いを示します。
JDeveloperは、EJB 3xおよびバージョン1.0から2.1をサポートしています。ただし、EJBウィザードはバージョン2.x以前のEJBの作成をサポートしていませんが、かわりに、旧EJBをバージョン3.1にインポートするように要求されます。現在のJDeveloper文書(ユーザー・ガイドのこの章および埋め込まれているオンライン・ヘルプを含む)は、EJB 3.1開発タスクに焦点を当てています。
ノート:
EJB 2.1以前の使用方法の詳細は、JDeveloper10gの旧バージョンのドキュメントを参照してください。EJBアプリケーション開発インタフェースはバージョンごとに異なる可能性があり、一部の履歴ヘルプの内容は現在のバージョンでは古い場合があります。
EJB 3.1の仕様およびドキュメントについては、http://docs.oracle.com/javaee/
で「Java Platform, Enterprise Edition (Java EE) Technical Documentation」のページを参照してください。
ノート:
EJB 3xを使用している場合、一部のデプロイ・ファイルのかわりに注釈を使用できる場合があります。デプロイメント・ディスクリプタを含めて、注釈をオーバーライドするか、または注釈でサポートされていないオプションを指定します。
サポートされる新規EJB 3.1機能
EJB 3.1の仕様では、プログラミングおよびパッケージ化モデルの変更が簡素化されています。
-
シングルトン・セッションBean: シングルトン・セッションBeanは、セッションBeanが特定のJava Virtual Machine (JVM)でアプリケーションごとに1回インスタンス化され、それはアプリケーションのライフサイクルにわたって存在することを保証する正式なプログラミング構成メンバーとして機能します。シングルトンでは、エンタープライズBeanコンポーネントの複数のインスタンス間、またはアプリケーションの複数のエンタープライズBeanコンポーネント間で状態を容易に共有できます。
-
No Interfaceクライアント・ビューの簡素化: No-Interfaceローカル・クライアント・ビュー・タイプでは、ローカル・ビジネス・インタフェースをオプションにすることにより、EJBデプロイメントが簡素化されます。ローカル・ビジネス・インタフェースを持たないBeanは、ビジネス・インタフェースを別途作成しなくても同じエンタープライズBean機能を提供できるNo-Interfaceビューを公開します。
-
WARファイルでの直接的なEJBディレクトリのパッケージ化およびデプロイメント - EJB 3.1ではEJBコンポーネントを直接Webアプリケーション・アーカイブ(WAR)ファイルの中に配置する機能を使用することで、アーカイブを生成してWebコンポーネントとEJBコンポーネントを保存し、それらをエンタープライズ・アーカイブ(EAR)ファイルで結合する必要がなくなりました。
-
ポータブル・グローバルJNDIネーミング - EJB 3.1のポータブル・グローバルJNDIネーミング・オプションでは、一般的でよく知られているネームスペースを多数提供し、そのネームスペースで
java:global[/<アプリケーション名>]/<モジュール名>/<Bean名>
というパターンを使用して、EJBコンポーネントを登録およびルックアップできます。これにより、EJBコンポーネントをJNDIに登録する方法および場所、およびそれらをアプリケーションでルックアップおよび使用する方法を標準化します。 -
非同期セッションBeanの呼出し - EJB 3.1セッションBeanでは、非同期クライアント呼出しセマンティクスでメソッドを公開できます。EJBクラスまたは特定のメソッドで
@Asynchronous
アノテーションを使用すると、メソッドが呼び出されたときに、クライアントに即座に制御を戻すようにEJBコンテナに指示します。メソッドはfutureオブジェクトを返して、クライアントにメソッド呼出しのステータスをチェックさせて、非同期に生成される結果の値を取得できます。 -
EJBタイマーの機能向上 - EJB 3.1タイマー・サービスでは、カレンダベースのEJBタイマー式をサポートします。このスケジューリング機能では、CRONスタイルのスケジュール定義という形式をとっています。これは、EJBメソッドに配置され、定義されたスケジュールに応じてメソッドを自動的に呼び出せます。また、EJB 3.1では、Beanクラスまたはデプロイメント記述子のメタデータに基づくタイマーの自動作成もサポートします。これによりBean開発者は、Bean呼出しに依存せずにタイマーをスケジューリングし、プログラムでいずれかのTimer Serviceタイマー作成メソッドを呼び出すことができます。自動作成されるタイマーは、アプリケーション・デプロイメントの結果としてコンテナで作成されます。
サポートされているEJB 3.0の新機能と変更された機能
EJB 3.0と以前のバージョンとの主な違いは、次のとおりです。
-
EJBの簡素化 - EJB 3.0では、ホーム・インタフェースおよびコンポーネント・インタフェースが不要であり、
javax.ejb.EnterpriseBean
インタフェースを実装するためのBeanクラスの要件もありません。EJB Beanクラスは完全なJavaクラス(POJO)となり、インタフェースは単純なビジネス・インタフェースとなります。このBeanクラスでは、ビジネス・インタフェースが実装されます。 -
デプロイメント・ディスクリプタに代わる注釈の使用 - デプロイメント・ディスクリプタのかわりにメタデータ注釈が使用されます。注釈により、Beanタイプ、トランザクションまたはセキュリティ設定などの様々な属性、環境のO-Rマッピングとインジェクションまたはリソース参照を指定します。デプロイメント・ディスクリプタ設定により、メタデータ注釈をオーバーライドします。
-
依存性インジェクション: EJB環境の参照と使用およびリソース参照のためのAPIが簡素化され、かわりに依存性インジェクションが使用されています。依存性インジェクションにはメタデータ注釈が使用されます。
-
ライフサイクル・メソッドおよびコールバック・リスナー・クラスの拡張 - EJBの前のバージョンとは異なり、不要なコールバック・メソッドをすべて実装する必要はありません。かわりに、任意のメソッドをコールバック・メソッドとして指定し、ライフサイクル・イベントに関する通知を受信します。同じBeanクラスで定義されているコールバック・メソッドのかわりに、コールバック・リスナー・クラスが使用されます。
-
インターセプタ - インターセプタは、ビジネス・メソッドのコールを捕捉するメソッドです。インターセプタ・メソッドは、ステートレス・セッションBean、ステートフル・セッションBeanまたはメッセージドリブンBeanで定義されます。Beanクラスでインターセプタ・メソッドを定義するかわりに、インターセプタ・クラスが使用されます。
-
EJBのJNDI参照の簡素化 - EJBの参照が簡素化されており、EJBで
create()
メソッドを呼び出すことでクライアントはBeanインスタンスを作成する必要がなくなり、EJBでメソッドを直接呼び出すことができるようになりました。
セッションBean
-
Beanの簡素化 - セッションBeanは完全なJavaクラスであり、
javax.ejb.SessionBean
インタフェースは実装しません。ホーム・インタフェースはオプションです。セッションBeanには、リモートまたはローカル(あるいはその両方)のインタフェースがあり、これらのインタフェースはEJBObject
またはEJBLocalObject
を拡張する必要はありません。 -
メタデータ注釈 - メタデータ注釈は、BeanまたはインタフェースおよびセッションBeanのランタイム・プロパティを指定するために使用されます。たとえば、セッションBeanは、Beanタイプを指定するために
@Stateless
または@Stateful
でマークされます。 -
ライフサイクル・メソッドおよびコールバック・リスナー - コールバック・リスナーは、ステートフル・セッションBeanとステートレス・セッションBeanの両方でサポートされます。これらのコールバック・メソッドは、注釈またはデプロイメント・ディスクリプタを使用して指定されます。
-
依存性インジェクション - 依存性インジェクションは、ステートフル・セッションBeanまたはステートレス・セッションBeanから使用されます。開発者は、メタデータ注釈またはデプロイメント・ディスクリプタのいずれかを使用して、リソース、EJBコンテキストまたは環境エントリを挿入できます。
-
インターセプタ - インターセプタ・メソッドまたはインターセプタ・クラスは、ステートフルとステートレスの両方のセッションBeanでサポートされます。
メッセージドリブンBean (MDB)
-
Beanの簡素化 - メッセージドリブンBeanは
javax.ejb.MessageDriven
インタフェースを実装する必要がなく、javax.jms.MessageListener
インタフェースを実装します。 -
メタデータ注釈 - メタデータ注釈は、BeanまたはインタフェースおよびMDBのランタイム・プロパティを指定するために使用されます。たとえば、MDBは、Beanタイプを指定するために
@MessageDriven
でマークされます。 -
ライフサイクル・メソッドおよびコールバック・リスナー - コールバック・リスナーは、MDBでサポートされます。これらのコールバック・メソッドは、注釈またはデプロイメント・ディスクリプタを使用して指定されます。
-
依存性インジェクション - 依存性インジェクションは、MDBから使用されます。メタデータ注釈またはデプロイメント・ディスクリプタのいずれかを使用して、MDBで使用されるリソース、EJBコンテキストまたは環境エントリを挿入します。
-
インターセプタ - インターセプタ・メソッドまたはインターセプタ・クラスは、MDBで使用できます。
エンティティ - Java永続性API (JPA)
-
Beanの簡素化(POJO永続性): EJB 3.0ではエンティティBeanが大幅に簡素化され、POJO永続性モデルが標準化されます。エンティティBeanは具体的なJavaクラスであり、インタフェースは不要です。エンティティBeanクラスはポリモフィズムと継承をサポートします。エンティティには様々なタイプの関連を設定でき、コンテナ管理の関連性は開発者によって手動で管理されます。
-
EntityManager API: EJB 3.0では、エンティティの作成、検索、削除および更新に使用される
EntityManager
APIが導入されています。EntityManager
APIは、Value Objectパターンに似たエンティティBeanインスタンスの連結解除/マージの概念を導入します。Beanインスタンスは連結解除され、クライアントによってローカルで更新された後エンティティ・マネージャに戻され、データベースとマージ/同期化されます。 -
メタデータ注釈: メタデータ注釈は、デプロイメント・ディスクリプタの要件を削除することで、エンティティの開発を大幅に簡素化します。エンティティ注釈は、エンティティBeanになるクラスを指定するために使用されます。注釈は、トランザクション属性、セキュリティ権限、コールバック・リスナーおよび注釈付き問合せを指定するために使用されます。
-
問合せ言語の強化: EJB 3.0では、Java永続性問合せ言語(JPQL)によってエンティティの問合せ機能が大幅に向上しています。JPQLは、バルク更新と削除、JOIN操作、GROUP BY HAVING、投影、サブ問合せなどの追加操作によりEJB-QLを強化します。EJB QLを使用して動的問合せを作成することもできます。
-
ライフサイクル・メソッドおよびコールバック・リスナー - コールバック・リスナーは、エンティティBeanでサポートされます。コールバック・メソッドは、注釈またはデプロイメント・ディスクリプタを使用して指定されます。
EJB 3.xアプリケーションのビルドおよび開発プロセス
JDeveloper機能を使用して、EJB Webアプリケーションのフレームワークを作成し、EJBビジネス・レイヤーを設定します。ウィザードを使用して、エンティティ、セッションBeanおよびセッション・ファサードを作成し、永続性ユニットを作成します。データ・コントロールを有効にして、JDeveloperの統合サーバー機能を使用してこれらをテストします。
JDeveloperには、エンタープライズ・アプリケーションのEJBビジネス・レイヤーを設定するための完全機能セットが含まれます。
段階的ウィザードを使用してEJB Webアプリケーション用のフレームワークを作成し、エンタープライズ・アプリケーションのモデル・レイヤーを設定することから開始できます。次に、ウィザードを使用して、データベース表に相当するエンティティを作成できます。さらに、ウィザードを使用して、セッションBeanおよびセッション・ファサードを作成し、永続性ユニットを構築できます。Oracle ADFには、データ・コントロールを可能にするコンポーネントが用意されています。準備が整ったら、JDeveloper統合サーバー機能を使用してこれをテストできます。
EJB 3xアプリケーションの開発プロセス
JDeveloperには、エンティティの作成、セッションBeanおよびファサードの作成、EJBのデプロイ、EJBのリモート・テストおよびデータ・コントロールへのビジネス・サービスの登録を実行するためのツールが用意されています。
JDeveloperには、次の項で説明するように、EJBアプリケーションを開発するためのツールが含まれます。
エンティティの作成
エンティティ・ウィザードを使用してエンティティを作成するか、またはオンライン、オフラインまたはアプリケーション・サーバー・データソース接続を使用して表からエンティティを作成します。
エンティティ・ウィザードを使用して、エンティティを作成、またはオンライン、オフラインまたはアプリケーション・サーバー・データソース接続を使用して表からエンティティを作成します。「表からのエンティティ」ウィザードを使用して、データベース表からエンティティをリバース・エンジニアリングします。エンティティ・ウィザードでは、永続性ユニットおよびデータベース接続を選択または追加したり、エミュレートするデータベースを選択したりできます。また、自分のエンティティ用のデータベース表を選択することもできます。「JPAエンティティの作成方法」を参照してください。
エンティティは、既存の表から作成するか、またはJavaソース・エディタを使用して手動で作成できます。既存の表からエンティティを作成する場合、マッピングは自動的に行われます。O-Rマッピング・メタデータを使用してエンティティを手動で作成した場合、マッピングに対する制御を増強できますが、注釈のコーディングを手動で行う必要があります。「O-Rマッピングのメタデータ注釈」を参照してください。
セッションBeanおよびセッション・ファサードの作成
セッションBeanを作成して、プロジェクト内のエンティティのセッション・ファサード・メソッドを生成します。セッション・ファサードはデータを集約して表示し、ビジネス・ロジックに場所を提供します。
セッションBeanを使用して、セッション・ファサード・デザイン・パターンを実装できます。セッション・ファサードはデータを集約して表示し、ビジネス・ロジックに場所を提供し、コンテナを介してトランザクション・コンテキストを設定します。「セッションBeanでのビジネス・プロセスの実装」および「セッション・ファサードの使用」を参照してください。
ウィザードを使用してセッションBeanを作成する場合、同じプロジェクト内のすべてのエンティティのセッション・ファサード・メソッド生成を選択できます。生成するコア・トランザクション・メソッド、get()
アクセッサと set()
アクセッサ、およびエンティティ上のファインダ・メソッドを選択できます。新しいエンティティ、またはエンティティ上の新しいメソッドを作成する場合、既存のセッション・ファサードを更新するには、「アプリケーション」ウィンドウでそのセッション・ファサードを右クリックし、「セッション・ファサードの編集」を選択します。
EJBのデプロイ
JDeveloperが提供するOracle WebLogic Serverは、デプロイしたEJBのコンテナとして機能します。JDeveloperが生成するWebLogic固有のデプロイメント・プロファイルを使用するか、カスタム・プロファイルを作成します。
JDeveloperには、デプロイしたEJBのコンテナとしてOracle WebLogic Serverが用意されています。デフォルトでは、JDeveloperサーバー固有のデプロイメント・プロファイルが生成されます。WebLogic固有のデプロイメント・プロファイルを作成することもできます。「EJBモジュールおよびJPA永続性ユニットのデプロイ」を参照してください。
EJBのリモート・テスト
JDeveloperがリモート・サーバーで使用するために作成したサンプル・クライアントを使用して、EJBをリモート・テストします。
JDeveloperでは、リモート・サーバーで使用するサンプル・クライアントも作成できます。サンプル・クライアントの生成方法は、リモート接続の詳細を指定する以外は、ローカル・クライアントの場合と同様です。「リモート・サーバーを使用したEJB/JPAコンポーネントのテスト方法」を参照してください。
Oracle ADFデータ・コントロールへのビジネス・サービスの登録
ADFコンポーネントを使用して、エンティティのデータ・コントロールを有効にします。
ADFには、エンティティのデータ・コントロールを可能にするコンポーネントが用意されています。エンティティのデータ・コントロールを手動で追加すると、Java EEアプリケーションによって選択的コンポーネントが統合されます。「ADFデータ・コントロールの使用」を参照してください。
EJBビジネス・サービス・レイヤーの使用方法
WebベースのEJB 3xアプリケーションのためのモデル・ビジネス・サービス・レイヤーを作成します。Web-ベース・アプリケーションを作成する手順を使用します。JPAエンティティの作成、セッション・ファサードの実装、ビジネス・サービス・モデル・プロジェクトのデータ・コントロールへの登録、アプリケーションの実行、テストおよびデプロイを行うステップを使用します。
WebベースのEJB 3xアプリケーションのためのモデル・ビジネス・サービス・レイヤーを作成します。
Webベースのアプリケーションを作成するには:
-
「ファイル」→「新規」→「アプリケーション」を選択します。
「新規ギャラリ」の「一般」カテゴリに使用可能なアプリケーションの一覧が表示されます。EJBプロジェクトの場合、カスタム・アプリケーションまたはJava EEのWebアプリケーションをビルドすることを選択できます。Java EEのWebアプリケーションにより、EJB/JPAのデータバインドされたWebアプリケーションが作成されます。
ヒント: よく使用される選択項目は、容易にアクセスできるように「新規」メニューに自動的に保存されます。
JPAエンティティを作成するには:
-
「アプリケーション」ウィンドウで、JPAエンティティを作成するプロジェクトを右クリックし、「新規」をクリックします。
-
「新規ギャラリ」で、「ビジネス層」を開き、「EJB」を選択し、さらに「エンティティ」または「表からのエンティティ」を選択して、「OK」をクリックします。
ヒント: よく使用される選択項目は、容易にアクセスできるように「新規」メニューに自動的に保存されます。
-
「永続性ユニット」ページにアクセスしたら、「次へ」をクリックしてデフォルトの永続性ユニット
persistence.xml
を自動的に作成するか、「新規」をクリックして既存のMETA-INF/persistence.xml
ファイル内に新規の永続性グループを作成します。 -
「エンティティ」または「表からのエンティティ」ウィザードのその他のステップを実行して、JPAエンティティを作成します。
詳細は、随時[F1]を押すか、ウィザード内で「ヘルプ」をクリックしてください。
セッション・ファサードを実装するには:
データ・コントロールを使用してビジネス・サービスのモデル・プロジェクトを登録するには:
-
「アプリケーション」ウィンドウでセッションBeanを右クリックし、「データ・コントロールの作成」を選択します。
これにより、セッションBeanを処理するようにデータ・コントロールを初期化するための情報が含まれる
DataControls.dcx
と呼ばれるファイルが作成されます。
アプリケーションを実行およびテストするには:
-
WebベースのEJBアプリケーション用のモデル・レイヤーの基本フレームワークを作成しました。このフレームワークを使用して、アプリケーションを構築する過程でアプリケーションをテストします。詳細は、「EJB/JPAコンポーネントの実行およびテスト」を参照してください。
アプリケーションをデプロイするには:
統合サーバーはJDeveloper内で動作します。このサーバーを使用すると、EJBの実行およびテストが可能であり、何の変更も加えずにそのEJBをデプロイできます。このサーバーを使用する場合、デプロイメント・プロファイルは不要で、初期化の必要もありません。「デプロイメント・ディスクリプタ」ウィザードを使用してデプロイメント・ディスクリプタejb-jar.xml
を作成してから、アプリケーションを使用したデプロイメント用としてEJBモジュールをパッケージ化します。
Oracle JDeveloperでのJava EEデザイン・パターンの使用
Java EEデザイン・パターンは、アプリケーション設計のベスト・プラクティスを提供します。EJBアプリケーションは、MVC、セッション・ファサードおよびビジネス委任のJava EEデザイン・パターンを実装できます。
Java EEデザイン・パターンは、定型的な設計に関する問題を解決するためのベスト・プラクティスをまとめたものです。各パターンは様々な問題に応用できる既成のソリューションであり、成功を収めたJava EE開発者の経験を活用しています。
JDeveloperを使用すると、EJBアプリケーションに次のJava EEデザイン・パターンを実装できます。
-
MVC - MVCパターンでは、アプリケーションはモデル、ビューおよびコントローラという3つの部分に分割されます。モデルはアプリケーションのビジネス・サービスを表し、ビューはアプリケーションのうちクライアントがアクセスする部分です。コントローラはアプリケーションのフローとアクションを制御し、モデルとビューの間にシームレスな相互作用をもたらします。プロジェクトの開始時にFusion Webアプリケーション(ADF)テンプレートまたはJava EE Webアプリケーション・テンプレートを選択すると、MVCパターンが自動的に実装されます。
-
セッション・ファサード - セッション・ファサード・パターンには、下位レベルEJB (通常はJPAエンティティ)が含まれており、EJB間の複雑な相互作用が集中化されます。また、アプリケーションのビジネス・サービスに対して単一のインタフェースを提供します。「セッションBeanでのビジネス・プロセスの実装」を参照してください。
-
ビジネス委任 - ビジネス委任パターンにより、クライアントとビジネス・サービスが切り離され、ビジネス・サービスの基礎となる実装詳細が隠されます。ビジネス委任パターンは、JDeveloperの「データ・コントロール・パレット」に表示されるデータ・コントロールにより実装されます。『Oracle ADFデータ・コントロールによるアプリケーションの開発』のADFデータ・コントロールの使用に関する項を参照してください。
Java EE Contexts and Dependency Injection (CDI)の使用
新規アプリケーションでエンタープライズBeanをJavaServer Facesテクノロジと併用する場合は、コンテキスト、依存性インジェクション、インターセプタといったJava EEプラットフォームのContexts and Dependency Injectionサービスを使用します。
Java EEプラットフォームのContexts and Dependency Injection (CDI)はサービスのセットです。これらを併用することで、開発者はWebアプリケーションでエンタープライズBeanをJavaServer Facesテクノロジと一緒に使用しやすくなります。
CDIで提供される最も基本的なサービスは次のとおりです。
-
コンテキスト: ステートフル・コンポーネントのライフサイクルと相互作用を、明確に定義されているが拡張可能なライフサイクル・コンテキストにバインドする機能。
-
依存性インジェクション: コンポーネントを型安全な方法でアプリケーションに挿入する機能。たとえば、特定のインタフェースのどの実装を挿入するかをデプロイメント時に選択できます。依存性インジェクションは、ステートフル・セッションBeanまたはステートレス・セッションBeanのいずれかからメッセージドリブンBeanとともに使用されます。開発者は、メタデータ注釈またはデプロイメント・ディスクリプタのいずれかを使用して、EJBで使用されるリソース、EJBコンテキストまたは環境エントリを挿入できます。
-
インターセプタ: ビジネス・メソッドの呼出しを捕捉するメソッドです。インターセプタ・メソッドは、ステートレス・セッションBean、ステートフル・セッションBeanまたはメッセージドリブンBeanで定義されます。Beanクラスでインターセプタ・メソッドを定義するかわりに、インターセプタ・クラスが使用されます。
CDIの詳細は、Java EE 6チュートリアルの「Java EEプラットフォームのContexts and Dependency Injectionの概要」を参照してください。
EJB 3.xの場合、CDIの次の機能がJDeveloperでサポートされます。
beans.xmlファイル
CDI (Contexts and Dependency Injection)を使用するアプリケーションにはbeans.xml
ファイルが必要です。アプリケーションがEJBプロジェクトの一部の場合(プロジェクトの.jpr
ファイルに基づく)、beans.xml
ファイルは、そのプロジェクトのMETA-INFディレクトリに生成されます。Webアプリケーションなどの他のすべてのタイプのアプリケーションの場合、beans.xml
ファイルは、そのプロジェクトのWEB-INFディレクトリに生成されます。beans.xml
ファイルは空でも構いません。
マネージドBeanの詳細は、Java EE 6チュートリアルの「Beanについて」を参照してください。
beans.xmlファイルを作成するには:
インターセプタ・バインディング・タイプ
インターセプタ・バインディングは、インターセプタを、マネージドBean (それ自体はインターセプトやデコレータではない)やEJBセッション、またはメッセージドリブンBeanに関連付けるJava注釈です。
インターセプタの詳細は、Java EE 6チュートリアルのCDIアプリケーションでのインターセプタの使用に関する項を参照してください。
インターセプタ・バインディング・タイプを作成するには:
修飾子タイプ
修飾子タイプは、特定タイプのBeanの各種実装を提供する場合に使用可能なJava注釈です。
修飾子の詳細は、Java EE 6チュートリアルの修飾子の使用に関する項を参照してください。
修飾子タイプを作成するには:
スコープ・タイプ
別のBeanクラスを挿入するBeanを使用するWebアプリケーションの場合、ユーザーがアプリケーションとやり取りする間、Beanの状態を保持できるようにしておく必要があります。この状態を定義するには、@RequestScoped
、@SessionScoped
または@ApplicationScoped
などのスコープをBeanに指定します。
スコープの詳細は、Java EE 6チュートリアルのスコープの使用に関する項を参照してください。
スコープ・タイプを作成するには:
ステレオタイプ
ステレオタイプは、他の注釈を組み込む注釈のタイプで、Beanに適用されます。ステレオタイプは、同様の機能を実行するBeanが複数あるような大規模アプリケーションで特に役立ちます。
ステレオタイプの詳細は、Java EE 6チュートリアルのCDIアプリケーションでのステレオタイプの使用に関する項を参照してください。
ステレオタイプを作成するには:
永続層の構築
アプリケーション内でデータ・オブジェクトを永続化するためにJPAエンティティを作成する方法を学習します。
永続層は、データベース内の表を表す永続性データ・オブジェクトがすべて含まれるEJBアプリケーションの一部です。EJB 3xで導入されたエンティティ・モデルはJava永続性APIで定義されているため、これらのビジネス・コンポーネントはJPAエンティティと呼ばれます。
JPAエンティティおよびJava永続性APIについて
JPAエンティティは、Oracle TopLinkおよびHibernateとシームレスに動作するよう設計された軽量永続性モデルを採用しています。
JPAエンティティの主な拡張機能は、次のとおりです。
-
POJOであるJPAエンティティ
-
O-Rマッピングのメタデータ注釈
-
継承およびポリモフィズムのサポート
-
CRUD操作のためのEntityManager APIの簡素化
-
問合せの拡張機能
POJOであるJPAエンティティ
JPAエンティティはPOJO (Plain Old Java Objects)であり、コンポーネント・インタフェースは不要です。JPAエンティティは、継承およびポリモフィズムもサポートしています。
次の例は、単純なJPAエンティティのソース・コードを示しています。
@Entity @Table(name = "EMP") public class Employee implements java.io.Serializable { private int empNo; private String eName; private double sal; @Id @Column(name="EMPNO", primaryKey=true) public int getEmpNo() { return empNo; } public void setEmpNo(int empNo) { this.empNo = empNo; } public double getSal() { return sal; } ... }
Beanクラスは、CMP 2.xエンティティBeanの場合と同様に、抽象クラスではなく具体的なクラスであることに注意してください。
O-Rマッピングのメタデータ注釈
O-Rマッピング注釈を使用すると、O-Rマッピング・メタデータを使用してエンティティを記述できます。その後、このメタデータは、エンティティの永続性および取得を定義するために使用されます。ベンダー固有のディスクリプタでO-R (オブジェクト・リレーショナル)マッピングを定義する必要はなくなります。
前述の例では、@Entity
、@Table
および@Column
注釈を使用して、これがエンティティであることをクラス・レベルで指定するとともに、エンティティの基礎となるデータベース表と列名を指定しています。次の例に示すように、マッピング注釈を使用して、エンティティ間の関連を定義することもできます。
@ManyToOne(cascade=PERSIST) @JoinColumn(name="MANAGER_ID", referencedColumnName="EMP_ID") public Employee getManager() { return manager; }
継承およびポリモフィズムのサポート
継承は、様々な使用例で非常に役に立ちます。一般的に使用され、JPAエンティティ用でサポートされる2つのタイプの継承は、次のとおりです。
-
クラス階層単位の単一表
-
結合されたサブクラス戦略
継承は、注釈を使用して表すことができます。次に、結合されたサブクラス戦略を使用するコードの例を示します。
@Entity @Table(name="EJB_PROJECT") @Inheritance(strategy=JOINED, discriminatorValue="P") @DiscriminatorColumn(name="PROJ_TYPE") public class Project implements Serializable { ... } @Entity @Table(name="EJB_LPROJECT") @Inheritance(discriminatorValue="L") public class LargeProject extends Project { ... } @Entity @Table(name="EJB_PROJECT") @Inheritance(discriminatorValue="S") public class SmallProject extends Project { ... }
CRUD操作のためのEntityManager APIの簡素化
javax.persistence.EntityManager
APIは、エンティティ・インスタンスに対するCRUD (Create、Read、UpdateおよびDelete)操作に使用されます。インスタンスを参照して操作するために、コードを記述する必要はなくなります。次のように、セッションBeanにEntityManagerのインスタンスを挿入し、EntityManagerインスタンスでpersist()
またはfind()
メソッドを使用して、エンティティBeanオブジェクトを作成または問い合せることができます。
@PersistenceContext private EntityManager em; private Employee emp; public Employee findEmployeeByEmpNo(int empNo) { return ((Employee) em.find("Employee",empNo)); } public void addEmployee(int empNo, String eName, double sal) { if (emp == null) emp = new Employee(); emp.setEmpNo(empNo); ... em.persist(emp); } }
問合せの拡張機能
問合せはメタデータ内で定義します。ここでは、注釈を使用して、またはデプロイメント・ディスクリプタ内で問合せを指定できます。JPAエンティティは、JPQL (Java永続性問合せ言語)を介してバルク更新および削除操作をサポートします。詳細は、「EJB/JPAに関する注釈」を参照してください。
JPAエンティティの作成方法
JDeveloperには、JPAエンティティを作成するための簡単なウィザードが2つ用意されています。オンライン・データベースまたはオフライン・データベースからのエンティティの作成、永続性ユニットの追加、継承戦略の定義、および使用可能なデータベース・フィールドからの選択が可能です。「表からのエンティティ」ウィザードを使用すると、オンライン・データベースまたはエミュレートされたオフライン・データベースや、アプリケーション・サーバーのデータ・ソースからエンティティを作成できます。
ノート:
「表からのエンティティ」ウィザードを実行している際に、「一般オプション」ページで「生成された各エンティティに対するIDジェネレータの添付」フィールドを構成した場合は、選択内容に応じて、オプション@SequenceGeneratorまたは@SequenceGeneratorに対してIDジェネレータを手動で構成する必要があります。追加の手順については、各エンティティ・クラスに生成されたJavadocを参照してください。
エンティティを作成、または表からエンティティを作成するには:
-
メイン・メニューから「ファイル」→「新規」の順に選択します。
-
「新規ギャラリ」で、「ビジネス層」を開き、「EJB」を選択し、さらに「エンティティ」または「表からのエンティティ」を選択して、「OK」をクリックします。
ヒント: よく使用される選択項目は、容易にアクセスできるように「ファイル」メニューに自動的に保存されます。
-
「エンティティ作成(表ベース)」または「エンティティの作成」ウィザードのステップを実行して、JPAエンティティを作成します。
詳細は、随時[F1]を押すか、ウィザード内で「ヘルプ」をクリックしてください。
既存のプロジェクトにEJBを作成するには:
-
「アプリケーション」ウィンドウで、JPAエンティティを作成するプロジェクトを選択し、「新規」を選択します。
-
「新規ギャラリ」で、「ビジネス層」を開き、「EJB」を選択し、さらに「エンティティ」または「表からのエンティティ」を選択して、「OK」をクリックします。
または、メイン・メニューから「ファイル」→「新規」を選択して「新規ギャラリ」を開き、ステップ2を実行します。
ヒント: よく使用される選択項目は、容易にアクセスできるように「ファイル」メニューに自動的に保存されます。
-
「エンティティ作成(表ベース)」または「エンティティの作成」ウィザードのステップを実行します。
新規のプロジェクトにEJBを作成するには:
シリアライズ可能なインタフェースの使用
「表からのエンティティ」ウィザードを使用してEJBを作成する場合、エンティティの実装java.io.Serializable
を(ウィザードの「一般オプション」ページ上で)使用できます。これを選択する場合、デフォルトのserialVersionUID
フィールドがエンティティ・クラスとして生成されます。たとえば、次のようになります。
public class Departments implements Serializable { private static final long serialVersionUID = -1771169464233198257L; ...
JDeveloperは、クラスを監査するたびに、VMがクラスに対して導出するserialVersionUID
を計算し、これを現在のserialVersionUID
クラス・プロパティと比較します。これらが同じ場合、クラスが変更されていないか、シリアライズに影響を与えるような方法で変更されていないことがわかります。
新しいserialVersionUID
が現在のserialVersionUID
フィールドと異なる場合、JDeveloperにより監査警告のフラグが付けられるため、その対処方法を決定する必要があります。
EJB/JPA用のSDOについて
JDeveloperは、SDO (サービス・データ・オブジェクト)データ・アプリケーション開発フレームワークをサポートします。
SDO 2.0フレームワークおよびAPIを使用すると、物理的にどのようにアクセスされているかに関係なくビジネス・データを簡単に修正できます。SDOは、バックエンド・データソースをカプセル化し、静的または動的なプログラミング・スタイルの選択肢を提供し、接続されたアクセスと切断されたアクセスの両方をサポートします。SDOは、XMLパーサー操作を処理し、データ解析ロジックを自動的にアプリケーションに統合します。「サービス対応アプリケーション・モジュールの統合」を参照してください。
JDeveloperによってサポートされるSDOアーキテクチャには、次の機能があります。
-
Java EEデータ・プログラミング・モデルの簡素化
-
サービス指向アーキテクチャ(SOA)内のデータの抽出
-
クライアント間のデータの受渡しに関する標準的方法の作成によるデータ・アプリケーション開発の統合
-
XMLのサポートおよび統合
-
Java EEパターンおよびベスト・プラクティスの導入
SDOは、切断されたデータ・グラフの概念に基づくデータ・アプリケーション用の統合フレームワークです。データ・グラフは、ツリー構造またはグラフ構造のデータ・オブジェクトのコレクションです。データ・オブジェクトを操作する汎用コードまたはフレームワーク・コードの開発を実現するには、データ・オブジェクトのデータ・モデルを公開するデータ・オブジェクト・メタデータに対するイントロスペクションが可能であることが重要です。Javaリフレクションの代替策として、SDOは、EJB Beanに詳述されているエンティティまたはデータ・モデル情報に基づいて、作成するXMLスキーマ定義(XSD)ファイルに格納されているメタデータにアクセスするためのAPIを提供します。
SOAプラットフォームへのデプロイメント用のEJB/POJOベースのADF-BCサービスの使用
JDeveloperのSDO機能は、EJBサービスまたはADF-BCサービスとして使用できます。ADF-BCサービスの使用を選択する場合、weblogic-application.xml
ファイルにリスナー参照を追加する必要があります。詳細は、「JPAエンティティ用のSDOサービス・インタフェースの作成方法」を参照してください。
SDOの詳細および仕様は、OSOA (Open Service Oriented Architecture) (http://www.oasis-opencsa.org/sdo
)を参照してください。
JPAエンティティ用のSDOサービス・インタフェースの作成方法
EJBセッションBeanまたはPlain Old Java Object (POJO)を介してJPAエンティティ・データにアクセスするためのサービス・インタフェースAPIを簡単に作成できます。このサービス・クラスは、JDeveloper Java EEアプリケーション内のJPAエンティティを作成、取得、更新および削除するための操作を公開します。
SDOサービス・インタフェースを作成するには:
SOAプラットフォームへのデプロイメント用のEJB/POJOベースのADF-BCサービスの構成方法
SDO外部バインディングを使用してファブリック・コンポジットからEJB/POJO SDO ADF-BCサービスを使用するには、ServiceRegistry
ロジックを呼び出すためのWeblogicアプリケーション・デプロイメント・リスナーを設定する必要があります。これを設定するには、weblogic-application.xml
ファイルにリスナー参照を追加します。
リスナー参照を追加するには:
デフォルトでは<workspace-directory>/src/META-INF
にあるweblogic-application.xml
に次の例のコードを追加します。
<listener> <listener-class> oracle.jbo.client.svc.ADFApplicationLifecycleListener </listener-class> </listener>
このリスナーが追加されると、JDeveloperではSDOサービス・アプリケーション名_JBOServiceRegistry_
がcomposite.xml
内のファブリック・サービス・レジストリに自動的に登録されます。
SDOアーキテクチャをサポートするために作成されるファイル・タイプ
SDOサービス・インタフェースを作成すると、サービス・インタフェースをサポートするために必要なファイルが自動的に作成されます。これらのファイルには、次のものがあります。
-
SessionEJBBeanWS.wsdl - このファイルには、SOAアプリケーションへのエントリ・ポイントまたはSOAアプリケーションからの参照ポイントを提供するサービスの機能が記述されています。WSDLファイルは標準規約言語を提供するもので、サービスの機能を理解する場合に必須です。
-
SessionEJBBeanWS.xsd - これは、SDOデータ型の観点からサービス・インタフェース・メソッドを定義するXMLスキーマ・ファイルです。セッションBeanインタフェースに含まれていたすべてのエンティティが、このスキーマ・ファイル内で対応する
DataObject
要素を持つことになります。実行時には、XSDHelper.INSTANCE.define()
メソッドをコールすることにより、これらのDataObjects
がSDOランタイムに登録されます。SDOタイプごとに静的タイプ固有のDataObject
が定義されます。
JPAエンティティからのデータベース表の生成方法
JDeveloper統合サーバーにJPAエンティティをデプロイすると、対応する既存の表がマップされていないすべてのエンティティにデータベース表が自動的に作成されます。マップされていないJPAエンティティごとに、1つのデータベース表が生成されます。
ノート:
主キー参照整合性制約が生成されますが、その他の制約は生成されない場合があります。
JPAエンティティからデータベース表を生成するには:
EJB/JPA用の注釈
注釈を使用すると、アプリケーション・コンポーネントに必要なデプロイメント・ディスクリプタの数を減らすことによって開発タスクを簡素化できます。また、注釈は、インタフェースなどのアーティファクトの生成にも使用できます。
注釈は、Javaソース・ファイルに追加されるメタデータ修飾子です。注釈は、コンパイル時にJavaコンパイラによってクラスにコンパイルされ、クラス、フィールド、メソッド、パラメータ、ローカル変数、コンストラクタ、列挙およびパッケージで指定できます。注釈を使用すると、コードの生成、コードの文書化、または実行時の高度なビジネスレベル・セキュリティや特別なビジネス・ロジックなどのサービスの提供のための属性を指定できます。
また、EJB/JPAクラスで使用可能な注釈のタイプはすべてXMLデプロイメント・ディスクリプタ・ファイルに追加することもできます。実行時には、XMLにより、クラス・レベルで追加された任意の注釈がオーバーライドされます。
次のステートレス・セッションBeanのように、注釈には@
記号がマークされます。
@Stateless public class MySessionBean
EJB 3xの注釈の詳細は、http://download.oracle.com/javase/1.5.0/docs/guide/language/annotations.html
を参照してください
ノート:
注釈はEJB 3xの新機能であり、EJBの前のバージョンでは使用できません。
設計時には、JDeveloperでは「プロパティ」ウィンドウを通して使用可能な注釈のリストが表示されます。注釈機能を使用すると、任意の適切なJavaクラスをEJBまたはJPAコンポーネントに変更できます。詳細は、「Javaクラスの注釈方法」を参照してください。
EJB 3.x
注釈を使用してBeanタイプを示すことができます。Beanタイプの注釈を標準クラスに追加すると、EJBになります。
次のタイプの注釈を使用できます。
-
ステートレス・セッションBeanです。「True」または「False」を選択し、ステートレス・セッションBeanとしてクラスに注釈を付けます。
-
ステートフル・セッションBeanです。「True」または「False」を選択し、ステートフル・セッションBeanとしてクラスに注釈を付けます。
-
これは、シングルトン・セッションBeanです。「True」または「False」を選択し、シングルトン・セッションBeanとしてクラスに注釈を付けます。
-
メッセージドリブンBeanです。「True」または「False」を選択し、メッセージドリブンBeanとしてクラスに注釈を付けます。
JPA 2.0
注釈は、新規Java永続性APIをエンティティBeanの代替手段としてサポートします。
次のタイプの注釈を使用できます。
-
JPAエンティティです。「True」または「False」 を選択し、JPAエンティティとしてクラスに注釈を付けます。
-
JPAマップされたスーパークラスです。「True」または「False」を選択し、JPAマップされたスーパークラスとしてクラスに注釈を付けます。
-
JPA埋込み可能です。「True」または「False」を選択し、JPA埋込み可能としてクラスに注釈を付けます。
標準JavaクラスをEJB/JPAコンポーネントに変換した後、またはEJB/JPAウィザードの1つを使用してコンポーネントを作成した場合、「プロパティ」ウィンドウには、異なるコンテキスト・オプション・セットが表示され、これを使用して、コンポーネント・クラス内の様々なメンバーの注釈を追加または編集できます。
Javaクラスの注釈方法
設計時には、JDeveloperではクラスに挿入可能な注釈のリストが表示されます。これらのオプションは、使用しているクラスのタイプや選択したメンバーの内容によって異なります。
任意の標準Javaクラスに注釈を付けてEJB/JPAコンポーネントにすることができます。注釈を使用してクラスをEJB/JPAとして定義した後、JDeveloperの「プロパティ」ウィンドウ内で選択可能な様々なメンバー・レベルの注釈を使用してコンポーネントを簡単にカスタマイズできます。
ノート:
注釈はEJB 3xでのみ使用可能であり、EJBの前のバージョンでは使用できません。
JavaクラスにEJB/JPAコンポーネントとして注釈を付けるには:
-
「アプリケーション」ウィンドウで、変換するクラスを選択します。
-
「構造」ウィンドウで、クラス名をダブルクリックします。
クラスがJavaソース・エディタで開いている場合、クラス定義行にカーソルを置きます。
-
「プロパティ」ウィンドウを開き、「EJB」/「JPA」タブを選択して、作成するコンポーネントのタイプを選択します。「True」を選択します。
JavaクラスがEJB/JPAコンポーネントとして注釈を付けられると、「プロパティ」ウィンドウでは「EJB/JPA」タブが表示されなくなり、選択したコンポーネント・タイプに固有の新規タブが表示されます。コンポーネントを標準Javaクラスに戻すには、コードから注釈を削除し、「プロパティ」ウィンドウに表示されているEJB/JPAコンポーネント・タイプをリセットします。
ノート:
ウィザードを介して作成されたEJBまたはJPAコンポーネントには、すでにクラス・タイプの注釈が含まれます。詳細は、「EJB 3xアプリケーションのビルドおよび開発プロセス」を参照してください。
クラス・レベルの注釈を使用してJavaクラスがEJB/JPAコンポーネントに変換されたら、「プロパティ」ウィンドウを使用して、このコンポーネント内のメンバー・フィールドまたはメソッドに対する注釈を追加または編集します。
EJB/JPAコンポーネント内の注釈を追加または編集するには:
エンティティ間の関連の表現
データベース表からエンティティを作成すると、外部キーはエンティティ間の関連として解析されます。これらの関連をさらに定義したり、新規関連を作成したり、JDeveloperのモデリング・ツールを使用して既存の関連を既存の表にマップできます。モデリング・ツールを使用すると、関連をエンティティ間の線で表したり、線の構成を変更することによって関連を変更できます。詳細は、「EJBダイアグラムによるモデリング」を参照してください。
Java永続性問合せ言語
Java永続性問合せ言語(JPQL)では、デプロイメント・ディスクリプタに抽象スキーマ型および関連を導入することで、エンティティBeanと依存クラスの間の関連を定義する標準的な方法が提供されます。JPQLでは、抽象スキーマ名および関連を使用して、ナビゲーションに対する問合せも定義されます。
JPQLの問合せ文字列は、2つの必須句(SELECTおよびFROM)およびオプションのWHERE句から構成されます。次に例を示します。
select d from Departments d where d.department_name = ?1
JPQLを使用するメソッドには、finderメソッドとselectメソッドの2種類があります。
-
ファインダ・メソッドはクライアントに公開され、1つのインスタンス、またはエンティティBeanインスタンスのコレクションのいずれかを返します。
-
selectメソッドはクライアントに公開されず、
cmp-field
型のインスタンス、またはcmr-field
によって表されるリモート・インタフェースを返すために内部で使用されます。
JPAオブジェクト・リレーショナル・マッピング
Java永続性APIを使用すると、Java EE 5アプリケーション・サーバーの内部とEJBコンテナの外部の両方で動作する標準的で移植可能な方法でJavaオブジェクトをリレーショナル・データベース表に宣言的にマップできます。このアプローチの場合、Java永続性が大幅に簡素化され、オブジェクト・リレーショナル・マッピング・アプローチが提供されます。
Oracle TopLinkでは、Javaソース・コード内のメタデータ注釈を使用してエンティティのJPA動作を構成できます。実行時に、コードは対応するJavaクラス・ファイルにコンパイルされます。
JavaクラスをJPAエンティティとして指定するには、次の例に示すように、@Entity
注釈を使用します。
@Entity public class Employee implements Serializable { ... }
注釈を選択して追加し、デプロイメント・ディスクリプタに指定されているデフォルトをオーバーライドできます。
JPA注釈の詳細は、TopLink JPA注釈参照(http://www.oracle.com/technetwork/middleware/ias/toplink-jpa-annotations-096251.html
)を参照してください。
Javaサービス・ファサードの使用方法
Javaサービス・ファサードは、アプリケーション・サーバーなしで実行可能な軽量テスト環境を実装します。EJB 3xの場合、Javaサービス・ファサードは、コンテナなしで同じ永続性ユニットのエンティティに対してファサード・メソッドを生成できるため、EJBセッション・ファサードと類似しています。
ワークフローをJavaサービス・ファサードと分離すると、参加者JPAオブジェクトにクライアントが直接依存しなくなるため、設計の柔軟性が高まります。参加者を変更するにはJavaサービス・ファサードの変更が必要になる可能性がありますが、ワークフローをファサード内で集中管理すると、このような変更をより管理しやすくなります。すべてのクライアントを変更しなくてもJavaサービス・ファサードを変更するだけですみます。また、ワークフローの職責がセッション・ファサードに委任されたため、クライアント・コードもより単純になりました。クライアントは、ビジネス・オブジェクト間の複雑なワークフロー相互作用を管理する必要がなくなっただけでなく、ビジネス・オブジェクト間の相互依存性も認識する必要はありません。
Javaサービス・クラスを実行できるようにするには、サンプルのPOJO Javaクライアントをmain()
メソッドで生成します。このメソッドにより、「メッセージ」ペインに実行中の出力が表示されます。あるいは、結果を整形式の表でブラウザに表示するサーブレットベースのクライアントを生成できます。
JDeveloperの「Javaサービス・ファサード」ウィザードは、エンティティに対するサービス・ファサードとしてJavaクラスを作成する際に使用します。新規Javaサービス・ファサードを作成するには、メイン・メニューから「ファイル」→「新規」を選択し、さらに「新規ギャラリ」で「ビジネス層」を開いて「EJB」を選択し、「Javaサービス・ファサード」を選択して「OK」をクリックします。
また、サービス・ファサードからデータ・コントロールを作成することもできます。「アプリケーション」ウィンドウで、サービス・ファサードの名前を右クリックして「データ・コントロールの作成」を選択します。「Beanデータ・コントロール・インタフェース・チューザ」ダイアログから、oracle.binding.*
データ・コントロール・インタフェースの実装を選択できます。このインタフェースには、TransactionalDataControl
、UpdatableDataControl
およびManagedDataControl
があります。詳細は、ダイアログで「ヘルプ」ボタンを選択してください。
エンティティの主キーの定義方法
主キーは、1つ以上の持続属性を持つ一意の識別子です。これは、同じタイプの他のすべてのインスタンスからクラスの1つのインスタンスを識別します。主キーは、リレーションシップの定義および問合せの定義に使用します。
JPAエンティティ・インスタンスごとに1つの主キーが必要です。データベース・スキーマに応じて、永続フィールドからシンプル主キーを定義したり、複数の永続フィールドからコンポジット主キーを定義できます。また、自動主キー値生成を定義し、JPAエンティティ実装を簡素化することもできます。
シンプル主キーを指定する最も簡単な方法は、単一のプリミティブに対する注釈を使用するか、JDKオブジェクト・タイプ・エンティティ・フィールドを主キーとして使用することです。また、マッピング・ディスクリプタXML (orm.xml
ファイル)を使用して、デプロイ時にシンプル主キーを指定することもできます。
注釈を使用してシンプル主キーを構成するには:
-
JPAエンティティ実装で、次の例に示すように、
@Id
注釈を使用して主キー・フィールドに注釈を付けます。import javax.ejb.Entity; import javax.persistence.Id; import javax.persistence.Table; import javax.persistence.Column; @Entity @Table(name = "EMP") public class Employee implements java.io.Serializable { private int empNo; private String eName; private String birthday; private Address address; private int version; public Employee() { { @Id @Column(name="EMPNO") public int getEmpNo() { return empNo; } ... }
-
アプリケーションをパッケージ化し、デプロイします。
マッピング・ディスクリプタ(orm.xml)を使用してエンティティのマッピングを構成するには:
永続性ユニットに対してマッピング・ファイル(orm.xml)を作成します。
-
「概要」エディタで
persistence.xml
ファイルを開きます。 -
「一般」タブを選択し、「JPAマッピング・ディスクリプタ」セクションで、「新規のJPAマッピング・ディスクリプタの作成」をクリックします。
-
「概要」エディタで
orm.xml
ファイルを開きます。 -
目的のエンティティを追加するには、「一般」タブを選択し、さらに「マップされたクラス」を選択し、「エンティティ」を選択した後で[+]ボタンをクリックします。
orm.xmlファイルが作成され、1つのエンティティに対してエントリが追加されます。そのエンティティにマッピングを追加する際、注釈またはXML(または、その両方)を使用してマッピングを保存するよう要求されます。
orm.xmlファイルでのIDマッピングの構成
セッションBeanでのビジネス・プロセスの実装
サーバー内のビジネス・タスクを実行してクライアントから複雑さを隠蔽するセッションBeanの実装方法を学習します。
セッションBeanは、アプリケーション・サーバー内の単一クライアントを表します。サーバー上でデプロイされたアプリケーションにアクセスするために、クライアントはセッションBeanメソッドを呼び出します。セッションBeanはクライアントの代わりに作業を実行し、サーバー内のタスクを実行してクライアントから複雑さを隠蔽します。セッションBeanは、インタラクティブ・セッションと類似しています。インタラクティブ・セッションに関わることができるのは1人のユーザーのみであるのと同じように、セッションBeanは共有されず、1つのクライアントのみが関わります。インタラクティブ・セッションの場合と同様、セッションBeanはデータをデータベースに保存しないため、永続的ではありません。クライアントが終了すると、セッションBeanは終了したように見え、クライアントとは関係なくなります。
JDeveloperの「セッションBean」ウィザードを使用して、セッションBeanおよびセッションBeanファサードを作成します。詳細は、「セッションBeanの作成方法」を参照してください。
セッションBeanには、次のように3種類あります。
-
ステートフル。ステートフル・セッションBeanは、クライアントのかわりに対話状態を維持します。対話状態は、セッションBeanフィールド値とセッションBeanフィールドから到達可能なすべてのオブジェクトとして定義されます。ステートフル・セッションBeanは、永続的なデータ・ストアのデータを直接表すものではなく、クライアントのかわりにデータにアクセスしてデータを更新します。通常、ステートフル・セッションBeanの存続期間はクライアントの存続期間と同じです。
-
ステートレス。ステートレス・セッションBeanは厳密には、サーバー側の動作を提供することを目的として設計されています。これは、ユーザー固有のデータを含まないため、無名です。EJBアーキテクチャは、単一のステートレス・セッションBeanが多くのクライアントのニーズに応じて処理を実行する手段を提供します。クライアントによって呼び出されたメソッドに応じた処理にかかわらない場合、ステートレス・セッションBeanインスタンスはすべて同等です。ステートレスという用語は、特定のクライアントに関するステート情報を持たないことを意味します。ただし、ステートレス・セッションBeanは、オープン・データベース接続など、クライアント固有ではないステートを持つ場合があります。
-
シングルトン。シングルトン・セッションBeanはステートレス・セッションBeanと同様に機能しますが、一連のステートレス・セッションBeanの中で任意のものがクライアント・リクエストに応答できるのとは対照的に、アプリケーションごとに存在するシングルトン・セッションBeanのインスタンスは1つだけである点が異なります。シングルトン・セッションBeanは、ステートレス・セッションBeanと同様に、Webサービス・エンドポイントを実装できます。シングルトンでは、エンタープライズBeanコンポーネントの複数のインスタンス間、またはアプリケーションの複数のエンタープライズBeanコンポーネント間で状態を容易に共有できます。シングルトン・セッションBeanではクライアントの呼出し間でその状態を保持しますが、サーバーのクラッシュまたは停止時にはその状態を保持する必要はありません。
セッション・ファサードの使用
JDeveloperでは、「セッションBean作成」ウィザードを介してセッションBeanを作成する場合は常に、セッション・ファサード・メソッドの自動生成を選択できます。これにより、ビジネス・ワークフローのセッション・ファサードとして機能するセッションBeanが作成されます。詳細は、「セッションBeanの作成方法」を参照してください。
セッション・ファサードはセッションBeanとして実装されます。セッションBeanファサードは、アプリケーションのビジネス・サービスに対して単一のインタフェースを提供することにより、ワークフローに参加するビジネス・オブジェクト間の複雑な相互作用をカプセル化します。セッション・ファサードは、多数のビジネス・オブジェクト間の関連を管理し、クライアントに対してより高度な抽象化を提供します。
セッション・ファサードにはステートフル、ステートレス、またはシングルトンのいずれでも使用できます。これは、ウィザードでセッション・ファサードを作成する際に定義します。
セッション・ファサードの詳細は、Oracle Technology Network (http://www.oracle.com/technetwork/java/sessionfacade-141285.html
)を参照してください。
ウィザードを使用して、セッションBeanの作成時にセッション・ファサードを自動的に実装して、実装するメソッドを選択します。EJBエンティティを作成すると、同じプロジェクト内で作成するセッションBeanは、公開するエンティティおよびメソッドを認識します。
セッションBeanの作成方法
セッションBeanウィザードを使用して、新規のセッションBeanまたはセッション・ファサードBeanを作成します。また、モデリング・ツールを使用してセッションBeanを作成することもできます。
ウィザードを使用してセッションBeanまたはセッション・ファサードを作成するには:
-
メイン・メニューから「ファイル」→「新規」の順に選択します。
-
「新規ギャラリ」で、「ビジネス層」を開いて「EJB」を選択し、さらに「セッションBean」を選択して、「OK」をクリックします。
ヒント: よく使用される選択項目は、容易にアクセスできるように「ファイル」メニューに自動的に保存されます。
ノート:
セッション・ファサードBeanを生成するには、永続性ユニットがすでに作成されている必要があります。永続性ユニットを生成するには同じステップに従いますが、「セッションBean」ではなく「JPA永続性ユニット」を選択します。
-
Beanをセッション・ファサードにするには、「EJBの名前とオプション」ページで「セッション・ファサード・メソッドの生成」を選択します。
詳細は、随時[F1]を押すか、ウィザード内で「ヘルプ」をクリックしてください。
-
「セッションBean作成」ウィザードで、その他のステップをすべて実行します。
セッションBeanファサード・メソッドを追加または削除するには:
-
「アプリケーション」ウィンドウで、編集するセッションBeanを選択します。
-
右クリックして「セッション・ファサードの編集」を選択します。
-
「セッション・ファサード・オプションの指定」ダイアログで、リスト上のメソッドを選択してメソッドがファサードを介して公開されるようにするか、メソッドの選択を解除してメソッドが公開されないようにします。
セッション・ファサードの詳細は、コアJ2EEパターン - セッション・ファサード(http://www.oracle.com/technetwork/java/sessionfacade-141285.html
)を参照してください。
セッションBeanとエンティティ間のローカル参照を作成して、セッション・ファサードを手動で作成することもできます。
ローカル参照を作成するには:
-
まだ作成していない場合は、セッションBeanを作成します。
-
Bean間にローカル参照を作成します。
-
Beanクラスの場合: EJB 3xを使用している場合は、Beanクラスに注釈を付けて参照を作成します。
-
EJBモジュール・エディタを使用する場合: EJB 2.1 (および以前のバージョン)を使用している場合は、「アプリケーション」ウィンドウでEJBノードを選択し、「構造」ペインで「メソッド」をダブルクリックし、「EJBモジュール・エディタ」を開きます。「EJBローカル参照」を選択します。
-
EJBダイアグラムでセッションBeanを作成するには:
EJBモジュールでのセッションBeanの作成方法
新規EJBモジュールと既存のEJBモジュールの両方でセッションBeanを作成できます。
既存のEJBモジュールにセッションBeanを作成するには:
-
「アプリケーション」ウィンドウで、EJBプロジェクトを右クリックして、「新規」→「セッションBean」を選択します。
または、プロジェクトを選択して、メイン・メニューで「ファイル」→「新規」→「ギャラリから」を選択します。「新規ギャラリ」で、「ビジネス層」を開いて「EJB」を選択し、さらに「セッションBean」を選択して、「OK」をクリックします。
-
「セッションBean作成」ウィザードのステップを実行します。
新規のEJBモジュールにセッションBeanを作成するには:
EJBモジュールでのメッセージドリブンBeanの作成方法
新規モジュールと既存のモジュールの両方でEJBを作成できます。
既存のEJBモジュールにメッセージドリブンBeanを作成するには:
-
「アプリケーション」ウィンドウで、EJBプロジェクトを右クリックして、「新規」→「メッセージドリブンBean」を選択します。
または、プロジェクトを選択して、メイン・メニューで「ファイル」→「新規」→「ギャラリから」を選択します。「新規ギャラリ」で、「ビジネス層」を開いて「EJB」を選択し、さらに「メッセージドリブンBean」を選択して、「OK」をクリックします。
-
「メッセージドリブンBean作成」ウィザードのステップを実行します。
新規のEJBモジュールにメッセージドリブンBeanを作成するには:
EJBメソッドの追加、削除および編集方法
プロジェクトにEJBが追加された後、そこに含まれるメソッドを追加、削除または編集できます。次で説明するようにメソッドを追加すると、定義時に変更がリモート・インタフェースとホーム・インタフェースで同期化されます。
メソッドを追加するには:
-
「アプリケーション」ウィンドウで、EJBを選択します。
-
構造ペインでEJBを右クリックし、「Enterprise Java Bean (EJB)」→「新規メソッド」を選択します。
-
「Beanメソッドの詳細」ダイアログで、必要に応じて詳細を追加します。
-
入力後、「OK」をクリックします。
メソッドを削除するには:
-
「アプリケーション」ウィンドウで、EJBを選択します。
-
構造ペインで、メソッドをダブルクリックしてソース・ファイル内で検索します。
-
ソース・ファイルで、メソッドを削除します。
メソッドを編集するには:
- 「アプリケーション」ウィンドウで、EJBを選択します。
- 構造ペインで、EJBを右クリックし、「Enterprise Java Bean (EJB)」→「プロパティ」を選択します。
- 「Beanメソッドの詳細」ダイアログで、必要に応じて詳細を編集します。
- 入力後、「OK」をクリックします。
EJBへのフィールドの追加方法
EJBダイアグラムまたはEJBモジュール・エディタを介して、EJBにフィールドを追加できます。
- 「アプリケーション」ウィンドウで、EJBを選択します。
- 構造ペインで、EJBを右クリックし、「Enterprise Java Bean (EJB)」ノード→「新規フィールド」を選択します。
- 「フィールド詳細」ダイアログで、必要に応じて詳細を追加します。
- 入力後、「OK」をクリックします。
EJBからのフィールドの削除方法
次に示すように、フィールドをEJBから削除できます。
EJBダイアグラム上のフィールドを削除するには:
-
EJB上のフィールド・コンパートメント(最初のコンパートメント)をクリックします。
-
フィールドを強調表示して[Del]キーを押します。
「アプリケーション」ウィンドウを使用してフィールドを削除するには:
- 「アプリケーション」ウィンドウで、EJBを選択します。
- 構造ペインで、フィールドをダブルクリックしてソース・ファイル内で検索します。
- ソース・ファイルで、フィールドを削除します。
EJB環境エントリを使用したビジネス・ロジックのカスタマイズ
環境エントリは、Beanのビジネス・ロジックをカスタマイズできる名前と値のペアです。環境エントリはエンタープライズBeanのデプロイメント・ディスクリプタに格納されるため、ソース・コードを変更せずにBeanのビジネス・ロジックを変更できます。
たとえば、注文を計算するEJBは、受注数量や特定のステータス(シルバー、ゴールド、プラチナ)に応じて、あるいは販売促進のために、割引きを行うことがあります。Beanのアプリケーションをデプロイする前に、特定の割引率を指定できます。アプリケーションを実行すると、メソッドは環境エントリをコールして割引値を調べます。別のデプロイメントについてその割引率を変更する場合、ソース・コードを変更する必要はなく、デプロイメント・ディスクリプタの環境エントリの値を変更するだけです。
ソース・コードで環境エントリに注釈を付けます。
完全なEJB 3x Java Community Processの仕様およびドキュメントは、http://www.oracle.com/technetwork/java/docs-135218.html
を参照してください。
クライアントへのデータの公開
クライアントにデータを公開する方法は、アプリケーションの開発方法に応じて異なります。
-
Oracle ADFフレームワークを使用している場合、クライアントに対するデータ公開の推奨方法は、セッション・ファサードのデザイン・パターンを実装し、セッションBeanをデータ・コントロール・パレットに挿入することです。このオプションは、データ統合を大幅に簡素化し、JDeveloper Studioリリースでのみ使用できます。詳細は、「セッションBeanでのビジネス・プロセスの実装」および「セッション・ファサードの使用」を参照してください。
-
Oracle ADFフレームワークを使用していない場合は、通常はマネージドBeanを作成してJSF/JSPページへの接続を調整します。詳細は、「JavaServer Facesを使用したアプリケーションの開発」を参照してください。
リソース参照の識別方法
リソース参照は、リソースに対するコンポーネントのコード名を識別するデプロイメント・ディスクリプタ内の要素です。リソース参照は、コネクタおよびデータベース接続を取得するため、ならびにJMS接続ファクトリ、JavaMailセッションおよびURLリンクにアクセスするために使用されます。
EJB 3.xリソース参照を追加または変更するには、ソース・コードに進みリソース参照に注釈を付けます。
ADFバインディングの主キーの指定方法
特定のADF Faces機能では、主キーを指定する必要があります。たとえば、af:tableSelectMany
コンポーネントを使用するADF Faces表がある場合、ソートを実装するために主キーを指定する必要があります。EJB/JPAエンティティを表から(EJB 3xを使用して)作成する場合、デフォルトでは主キーが指定されます。しかし、主キーを指定する必要がある場合は、次を実行します。
属性を主キーとして指定するには:
- ADFデータ・コントロールを作成して、エンティティ別にXML定義を作成します。詳細は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』のADFデータ・コントロールの使用に関する項を参照してください。
- 「アプリケーション」ウィンドウで、EJBエンティティのXMLファイルを選択します。
- 「構造」ウィンドウでエンティティ属性を選択し、さらに「表示」メニューから「プロパティ」を選択します。
- 「プロパティ」ウィンドウで主キーとして必要な属性を検索し、「主キー」の値を「True」に設定します。
EJBのADFデータ・コントロールの使用方法
JDeveloperでは、ADF Fusion Webアプリケーションを構築する際にデータ・コントロール・コンポーネントの完全セットが自動的に提供されます。Java EEアプリケーションまたはEJBプロジェクト(あるいはその両方)を構築する場合、個別セッションBeanでADFデータ・コントロールを割り当てます。これにより、Beanと同じ名前のデータ・コントロール・ファイルが追加されます。
詳細は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』のADFデータ・コントロールの使用に関する項を参照してください。
ダイアグラムでのEJB/JPAコンポーネントのモデル化
ダイアグラムでEJBおよびJPAコンポーネントをモデル化できます。
JDeveloperでこれらのコンポーネントをモデル化する方法の詳細は、「EJBダイアグラムによるモデリング」を参照してください。
Webアプリケーションの一部としてのEJBのデプロイメント
EJBクラスは、デプロイするためにアーカイブにパッケージ化することができます。
EJB 3.1では、エンタープライズBeanクラスはejb-jarファイルにパッケージ化する必要があるという制約が解除されています。そのため、Webアプリケーション・クラスに適用される同じパッケージ化のガイドラインを使用して、EJBクラスをWebアプリケーション・アーカイブ(WAR)の中に直接パッケージ化できます。EJBクラスをWEB-INF/classes
ディレクトリに置くか、WEB-INF/lib
ディレクトリ内のJARファイルに入れるだけです。必要に応じて、EJBデプロイメント記述子も使用する場合は、それをWEB-INF/ejb-jar.xml
としてパッケージ化できます。
EJBモジュールおよびJPA永続性ユニットのデプロイ
JPAエンティティBeanとEJBモジュールのデプロイについて学習します。
EJBモジュールは、1つ以上のEJB、永続性ユニットおよびオプションのEJBデプロイメント・ディスクリプタで構成されるソフトウェア・ユニットです。1つのJDeveloperプロジェクトに含まれるのは、1つのEJBモジュールのみです。デプロイ時には、モジュールはejb.jar
ファイルとしてパッケージ化されます。
JPAエンティティBeanのデプロイ
エンティティBeanは以前、セッションBeanおよびメッセージドリブンBeanとともにEJB JARファイルに1回だけパッケージ化されていました。しかし、JPAエンティティおよび永続性ユニットのテクノロジにより、これらはデプロイ時に独自のJARファイルpersistenceunit.jar
にパッケージ化されます。
この方法により、エンティティBean (JPAエンティティ)は、persistence.xml
ファイルが含まれているJPA永続性アーカイブJARに個別に格納されます。JPA永続性ユニットはEJBモジュール・パッケージの一部である必要はなく、the ejb.jar
ファイル内にバンドルできます。
EJBモジュールについて
1つのJDeveloperプロジェクトに含まれるのは、1つのEJBモジュールのみです。プロジェクト内で最初のセッションBeanまたはメッセージドリブンBeanを作成する場合、モジュールが存在しなければ、モジュールは自動的に作成されます。新規EJBモジュールのEJBバージョンと永続性マネージャは選択できます。
プロジェクトをデプロイする場合、セッションBeanおよびメッセージドリブンBeanとデプロイメント・ディスクリプタの集合を、アプリケーション・サーバーへのデプロイメントまたはアーカイブ・ファイルとしてのデプロイメントの準備が整っているEJB JARファイル(.jarファイル)に変換します。永続性ユニットを独自のJARファイルに限定することにより、永続性ユニットを他のアプリケーションで簡単に再利用できるようになります。詳細は、「アプリケーションのデプロイについて」を参照してください。
JPA永続性ユニットについて
JPA永続性ユニットは、 persistence.xml
ファイル、1つ以上のオプションのorm.xml
ファイル、および永続性ユニットに属する管理対象エンティティ・クラスで構成されています。永続性ユニットは、エンティティ・マネージャ、データソース、永続管理対象クラスおよびマッピング・メタデータの論理グループです。永続性ユニットは、エンティティ・マネージャ・プロバイダ、構成プロパティおよび永続管理対象クラスなどの詳細を論理的にグループ化することにより、エンティティ・マネージャの構成を定義します。
各永続性ユニットには名前を指定する必要があります。特定のEJB-JAR、WAR、EARまたはアプリケーション・クライアントJAR内に存在できるのは特定の名前を持つ1つの永続性ユニットのみです。永続性ユニットを独自の永続性アーカイブにパッケージ化し、Java EEモジュールによるアクセスが必要な任意の対象にこのアーカイブを含めることができます。
persistence.xml
ファイルにはセクションまたはグループが含まれます。これらのグループは、エンティティおよびエンティティに関連するランタイム・データに対応します。エンティティ・ウィザードを使用して新規エンティティを作成するときに、プロジェクト内に既存の永続性ユニットがある場合、エンティティはpersistence.xml内の独自のセクションに挿入されます。既存の永続性ユニットがない場合は、エンティティ定義のために含まれるセクションとともに永続性ユニットが作成されます。
META-INFディレクトリにpersistence.xmlファイルが含まれるJARファイルまたはディレクトリは、永続性ユニットのルートと呼ばれます。エンティティを使用するEJB 3xアプリケーションには、明示的に、またはJDeveloperのデフォルトの永続性ユニットを使用して少なくとも1つの永続性ユニットのルートを定義する必要があります。永続性ユニットをデプロイすると、persistenceunit.jar
と呼ばれるJARファイルが作成されます。詳細は、「アプリケーションのデプロイについて」を参照してください。
JPA永続性ユニットの作成方法
「永続性ユニット」ウィザードを使用してエンティティの永続性ユニットを作成できます。また、JPAエンティティを作成する場合、デフォルトの永続性ユニットがまだない場合はこれが作成されます。
JPA永続性ユニットを作成するには:
- 「アプリケーション」ウィンドウでプロジェクトを選択して、「ファイル」メニューから「新規」→「ギャラリから」を選択します。
- 「新規ギャラリ」から「ビジネス層」を開いて「EJB」を選択し、さらに「JPA永続性ユニット」を選択して、「OK」をクリックします。
- 「新規の永続性ユニット」ウィザードのステップを完了します。
JDeveloperへのEJBのインポート方法
JARファイルまたはデプロイメント・ディスクリプタから既存のEJBをインポートできます。
EJBモジュール、またはEJBモジュール内のEJBのサブセットをプロジェクトにインポートするには、次のようにします。
-
「ファイル」メニューから「インポート」を選択します。
-
「インポート」ダイアログで「EJB JARファイル(.jar)」を選択します。
-
「インポート」ウィザードのステップを実行します。
EJBデプロイメント・ディスクリプタ・ファイル(ejb-jar.xml)をインポートするには:
-
「ファイル」→「インポート」を選択します。
-
「インポート」ダイアログで「EJBデプロイメント・ディスクリプタ・ファイル(ejb-jar.xml)」を選択します。
-
「インポート」ウィザードのステップを実行します。
ノート:
このウィザードを使用してデプロイメント・ディスクリプタをインポートした後、同じウィザードで他のファイルをインポートすると、最後に使用したディスクリプタ・ファイル、JARファイルおよびIDE設定ファイル内のディスクリプタ・ソース・ディレクトリがキャッシュされるので便利です。これにより、たとえば、EJBモジュールを複数のモジュールに分割する、同じディレクトリ内にある複数のJARファイルをインポートする、などのタスクが容易になります。
WebLogicデプロイメント・ディスクリプタ・ファイル(weblogic-ejb-jar.xml)をインポートするには:
EJB/JPAコンポーネントの実行およびテスト
JDeveloperでEJBをテストする方法を学習します。
EJBをテストするには、EJBインスタンスを作成または検索し、そのリモート・インタフェース・メソッドをコールできるクライアント・プログラムを実行する必要があります。JDeveloper には、迅速にクライアントを作成できるサンプル・クライアント・ユーティリティが用意されています。EJBの実行およびテストには、統合サーバーまたはリモート・サーバーを使用しますが、どちらの場合にもサンプル・クライアント・ユーティリティを使用してクライアントを作成できます。
統合サーバーを使用したEJB/JPAコンポーネントのテスト方法
統合Oracle WebLogic ServerはJDeveloper内で動作します。このサーバーを使用すると、EJBの迅速かつ簡単な実行およびテストが可能であり、何の変更も加えずにそのEJBをデプロイできます。このサーバーを使用する場合、デプロイメント・プロファイルは不要で、初期化の必要もありません。
統合Oracle WebLogic Serverでサンプル・セッションBeanクライアントを実行するには:
-
「アプリケーション」ウィンドウでセッションBeanを右クリックして、「実行」を選択します。
「メッセージ」ペインではOracle WebLogic Serverは起動しています。
-
セッションBeanを右クリックして、コンテキスト・メニューから「セッションBeanクライアント」を選択します。
-
サンプル・クライアントの作成ダイアログで、「サーブレット・クライアント」とJavaクライアントのどちらを作成するかを指定します。
-
デフォルトで、統合Oracle WebLogic Serverに対してクライアントを作成するオプションが選択されているので、「OK」をクリックします。
クライアントが作成され、コード・エディタで開かれます。
BeanがJPAエンティティに対するファサードとして機能する場合、問合せメソッドをインスタンス化するためのコードが生成されます。Beanに対してメソッドを公開した場合、生成されたクライアントには、非コメント化して呼び出すことができるメソッドが含まれます。
-
Beanが「アプリケーション」ウィンドウから正常に起動されたら、サンプル・クライアントを右クリックして「実行」を選択します。
Javaクライアントの場合、「メッセージ」ペインに実行中の出力ログが表示されます。サーブレット・クライアントの場合、結果は整形式の表でブラウザに表示されます。
統合 Oracle WebLogic ServerでサンプルMDBクライアントを実行するには:
統合Oracle WebLogic ServerでサンプルMDBクライアントを正常に実行するには、まず、対応するJMSキュー・リソースをWebLogic Serverドメインに作成する必要があります。
-
JMSモジュール・リソースを作成する場合は、次のガイドラインを使用してください。
-
新規のキュー・リソース(たとえば、"DefaultQueue")を使用して、新規のテストJMSモジュール(たとえば、"TestJmsModule")を作成します。
-
生成したMDBの「マップされた名前」に一致するJNDI名(weblogic.wsee.DefaultQueueなど)を使用します。
-
デフォルトのサブデプロイメント・リソース(たとえば、"DefaultQueue")を追加し、それを、ドメインのDefaultServerインスタンスに関連付けられているJMSサーバーのターゲットとします。
-
-
「アプリケーション」ウィンドウで、サンプル・クライアントを作成して実行するMDBを選択します。
リモート・サーバーを使用したEJB/JPAコンポーネントのテスト方法
リモート・サーバー上でEJBをテストするには、EJBをデプロイしてからサンプル・クライアントを作成する必要があります。最初にデプロイを行うと、デプロイされたアプリケーションがフレームワークによって取得され、それがクライアントの選択リストに移入されます。
ノート:
同じモジュールで異なるEJBバージョンを組み合せることはできません。
リモート・サーバーを使用してサンプル・クライアントを実行するには:
-
必要に応じて、実行しているアプリケーション・サーバーに対する接続を作成します。詳細は、「ターゲット・アプリケーション・サーバーへの接続の作成方法」を参照してください。
-
プロジェクトレベルのEJB JARデプロイメント・プロファイルを作成します。
-
「アプリケーション」ウィンドウで、プロジェクトのノードを右クリックし、「デプロイ」→「新規デプロイメント・プロファイル」を選択します。
-
「デプロイメント・プロファイルの作成」ダイアログで、EJB JARファイルのプロファイル・タイプを選択し、そのプロファイルの名前を入力します。「OK」をクリックすると、「EJB JARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。デフォルトを受け入れて「OK」をクリックします。
-
-
アプリケーションレベルのEARタイプのデプロイメント・プロファイルを作成します。
-
「アプリケーション」→「デプロイ」→「新規デプロイメント・プロファイル」の順に選択します。
-
「デプロイメント・プロファイルの作成」ダイアログで、EARファイルのプロファイル・タイプを選択し、そのプロファイルの名前を入力します。「OK」をクリックすると、「EARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。
-
-
新しいEJB JARプロファイルをEARプロファイル・ファイルに追加します。
-
「EARデプロイメント・プロファイルのプロパティの編集」ダイアログのナビゲーション・ペインで、「アプリケーション・アセンブリ」を選択します。
-
「Java EEモジュール」ツリーを展開し、ステップ2で作成したEJB JARプロファイルを選択して「OK」をクリックします。
-
-
アプリケーション・サーバー接続にアプリケーションをデプロイします。「アプリケーション」→「「application-deployment-profileのデプロイ」の順に選択します。
-
「デプロイ」ダイアログ・ボックスで「アプリケーション・サーバーへのデプロイ」を選択し、「次へ」をクリックします。
-
「サーバーの選択」ページでアプリケーション・サーバー接続を選択し、「終了」をクリックします。「デプロイメント」ログ・ウィンドウで詳細を追跡できます。
-
「アプリケーション」ウィンドウでセッションBeanを右クリックして、「セッションBeanクライアント」を選択します。
-
サンプル・クライアントの作成ダイアログで、「サーブレット・クライアント」とJavaクライアントのどちらを作成するかを指定します。
-
デフォルトで、統合Oracle WebLogic Serverに対してクライアントを作成するオプションが選択されているので、「OK」をクリックします。
クライアントが作成され、コード・エディタで開かれます。
-
「アプリケーション」ウィンドウで新規クライアントを右クリックして、「実行」を選択します。
Javaクライアントの場合、「メッセージ」ペインに実行中の出力ログが表示されます。サーブレット・クライアントの場合、結果は整形式の表でブラウザに表示されます。
JUnitを使用したEJBユニットのテスト方法
JDeveloperでは、EJBに対するJUnit回帰テストがサポートされています。JUnitは、JDeveloperのオプション機能として用意されているオープン・ソースのJava回帰テスト用のフレームワークです。この機能を使用するには、JUnit拡張機能をインストールする必要があります。
JUnitを使用して、コードを検証するテストを記述および実行します。JUnit拡張機能をインストールした後、シンプル・ウィザードを使用してセッションBeanまたはJavaクラス・ファイルを選択し、これらのファイル内でテストするメソッドを選択し、JUnitテストを開始できます。
EJBに対してJUnitテストを実行するには:
- 「アプリケーション」ウィンドウでEJBセッションBeanまたは通常のJavaクラス(POJO)を右クリックして(または、ウィザードの中から移動することもできます)、「新規」→「ギャラリから」を選択します。
- 「新規ギャラリ」から「ビジネス層」および「EJB」を開き、「EJB JUnit TestCase」を選択して、「OK」をクリックします。
- JUnitウィザードを起動します。
- ウィザードのステップを完了します。