ヘッダーをスキップ
Oracle® Fusion Middleware Oracle JDeveloperによるアプリケーションの開発
12c (12.1.2)
E48018-02
  目次へ移動
目次

前
 
次
 

19 EJBおよびJPAコンポーネントを使用した開発

この章では、JDeveloperツールを使用して、Enterprise JavaBeans (EJB) 3xおよびJava永続性API (JPA)コンポーネントによるJava EEエンタープライズ・アプリケーションのビジネス層をビルドする方法について説明します。

この章には次の項が含まれます:

19.1 EJBおよびJPAコンポーネントを使用した開発について

JDeveloperには、EJBプロジェクト、エンティティ、永続性ユニット、セッションBeanおよびメッセージドリブンBeanを作成するための段階的ウィザードが用意されています。オンライン・データベース定義またはオフライン・データベース定義およびアプリケーション・サーバーのデータソース接続からエンティティを構築できます。また、JPAおよびTopLinkテクノロジとシームレスに統合できるため、完全な永続性パッケージを実現することもできます。

19.2 EJBバージョンおよび機能のサポート

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仕様には、簡易なプログラミングおよびパッケージング・モデルの変更が用意されています。

サポートされているEJB 3.0の新機能と変更された機能

EJB 3.0と以前のバージョンとの主な違いは、次のとおりです。

セッションBean

メッセージドリブンBean (MDB)

エンティティ - Java永続性API (JPA)

19.3 EJB 3.xアプリケーションのビルドおよび開発プロセス

JDeveloperには、エンタープライズ・アプリケーションのEJBビジネス・レイヤーの設定するための完全機能セットが含まれます。

段階的ウィザードを使用してEJB Webアプリケーション用のフレームワークを作成し、エンタープライズ・アプリケーションのモデル・レイヤーを設定することから開始できます。次に、ウィザードを使用して、データベース表に相当するエンティティを作成できます。さらに、ウィザードを使用して、セッションBeanおよびセッション・ファサードを作成し、永続性ユニットを構築できます。Oracle ADFには、データ・コントロールを可能にするコンポーネントが用意されています。準備が整ったら、JDeveloper統合サーバー機能を使用してこれをテストできます。

19.3.1 EJB 3xアプリケーションの開発プロセス

JDeveloperには、次の項目で説明するように、EJBアプリケーションを開発するためのツールが含まれます。

19.3.1.1 エンティティの作成

エンティティ・ウィザードを使用して、エンティティを作成、またはオンライン、オフラインまたはアプリケーション・サーバー・データソース接続を使用して表からエンティティを作成します。エンティティBean (表ベース)ウィザードを使用して、データベース表からエンティティをリバース・エンジニアリングします。エンティティ・ウィザードでは、永続性ユニットおよびデータベース接続を選択または追加したり、エミュレートするデータベースを選択したりできます。また、自分のエンティティ用のデータベース表を選択することもできます。詳細は、第19.6.2項「JPAエンティティの作成方法」を参照してください。

エンティティは、既存の表から作成するか、またはJavaソース・エディタを使用して手動で作成できます。既存の表からエンティティを作成する場合、マッピングは自動的に行われます。O-Rマッピング・メタデータを使用してエンティティを手動で作成した場合、マッピングに対する制御を増強できますが、注釈のコーディングを手動で行う必要があります。詳細は、第19.6.1.2項「O-Rマッピングに関するメタデータ注釈」を参照してください。

19.3.1.2 セッションBeanおよびセッション・ファサードの作成

セッションBeanを使用して、セッション・ファサード・デザイン・パターンを実装できます。セッション・ファサードはデータを集約して表示し、ビジネス・ロジックに場所を提供し、コンテナを介してトランザクション・コンテキストを設定します。詳細は、第19.7項「セッションBeanでのビジネス・プロセスの実装」および第19.7.1項「セッション・ファサードの使用」を参照してください。

ウィザードを使用してセッションBeanを作成する場合、同じプロジェクト内のすべてのエンティティのセッション・ファサード・メソッド生成を選択できます。生成するコア・トランザクション・メソッド、get()アクセッサとset()アクセッサ、およびエンティティ上のファインダ・メソッドを選択できます。新しいエンティティ、またはエンティティ上の新しいメソッドを作成する場合、既存のセッション・ファサードを更新するには、「アプリケーション」ウィンドウでそのセッション・ファサードを右クリックし、「セッション・ファサードの編集」を選択します。

19.3.1.3 EJBのデプロイ

JDeveloperには、デプロイしたEJBのコンテナとしてOracle WebLogic Serverが用意されています。デフォルトでは、JDeveloperサーバー固有のデプロイメント・プロファイルが生成されます。WebLogic固有のデプロイメント・プロファイルを作成することもできます。詳細は、第19.10項「EJBモジュールおよびJPA永続性ユニットのデプロイ」を参照してください。

19.3.1.4 EJBのリモート・テスト

JDeveloperでは、リモート・サーバーで使用するサンプル・クライアントも作成できます。サンプル・クライアントの生成方法は、リモート接続の詳細を指定する以外は、ローカル・クライアントの場合と同様です。詳細は、第19.11.2項「リモート・サーバーを使用したEJB/JPAコンポーネントのテスト方法」を参照してください。

19.3.1.5 Oracle ADFデータ・コントロールへのビジネス・サービスの登録

ADFには、エンティティのデータ・コントロールを可能にするコンポーネントが用意されています。エンティティのデータ・コントロールを手動で追加すると、Java EEアプリケーションによって選択的コンポーネントが統合されます。詳細は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』のADFデータ・コントロールの使用に関する項を参照してください。

19.4 EJBビジネス・サービス・レイヤーの使用方法

WebベースのEJB 3xアプリケーションのためのモデル・ビジネス・サービス・レイヤーを作成します。

Webベースのアプリケーションを作成するには、次のようにします。

JPAエンティティを作成するには、次のようにします。

  1. 「アプリケーション」ウィンドウで、JPAエンティティを作成するプロジェクトを右クリックし、「新規」をクリックします。

  2. 「新規ギャラリ」で、「ビジネス層」を開き、「EJB」を選択し、さらに「エンティティ」または「表からのエンティティ」を選択して、「OK」をクリックします。

    ヒント: よく使用される選択項目は、容易にアクセスできるように「新規」メニューに保存されます。

  3. 「永続性ユニット」ページにアクセスしたら、「次へ」をクリックしてデフォルトの永続性ユニットpersistence.xmlを自動的に作成するか、「新規」をクリックして既存のMETA-INF/persistence.xmlファイル内に新規の永続性グループを作成します。

  4. 「エンティティ」または「表からのエンティティ」ウィザードのその他の手順を実行して、JPAエンティティを作成します。

    詳細は、随時[F1]を押すか、ウィザード内で「ヘルプ」をクリックしてください。

セッション・ファサードを実装するには、次のようにします。

  1. 「アプリケーション」ウィンドウで、セッション・ファサードを作成するプロジェクトを右クリックし、「新規」を選択します。

  2. 「新規ギャラリ」で、「ビジネス層」を開いて「EJB」を選択し、さらに「Javaサービス・ファサード(JPA/Toplink)」を選択して、「OK」をクリックします。

    ヒント: よく使用される選択項目は、容易にアクセスできるように「新規」メニューに保存されます。

  3. 「Javaサービス・ファサード」ウィザードの手順を実行します。

    「EJBの名前とオプション」ページにアクセスする際、必ず「セッション・ファサード・メソッドの生成」を選択してください。こうしておくと、セッション・ファサード・メソッドが自動的にセッションBeanに追加されます。セッションBeanを右クリックして、「セッション・ファサードの編集」を選択することで、プロジェクト内のすべてのエンティティのセッション・ファサード・メソッドを作成および編集できます。JDeveloperでは、プロジェクト内の新しいエンティティおよびエンティティ上の新しいメソッドが自動的に認識されます。

    詳細は、随時[F1]を押すか、ウィザード内で「ヘルプ」をクリックしてください。

データ・コントロールを使用してビジネス・サービスのモデル・プロジェクトを登録するには、次のようにします。

アプリケーションを実行およびテストするには、次のようにします。

アプリケーションをデプロイするには、次のようにします。

統合サーバーはJDeveloper内で動作します。このサーバーを使用すると、EJBの実行およびテストが可能であり、何の変更も加えずにそのEJBをデプロイできます。このサーバーを使用する場合、デプロイメント・プロファイルは不要で、初期化の必要もありません。「デプロイメント・ディスクリプタ」ウィザードを使用してデプロイメント・ディスクリプタejb-jar.xmlを作成してから、アプリケーションを使用したデプロイメント用としてEJBモジュールをパッケージ化します。

19.5 Oracle JDeveloperでのJava EEデザイン・パターンの使用

Java EEデザイン・パターンは、定型的な設計に関する問題を解決するためのベスト・プラクティスをまとめたものです。各パターンは様々な問題に応用できる既成のソリューションであり、成功を収めたJava EE開発者の経験を活用しています。

JDeveloperを使用すると、EJBアプリケーションに次のJava EEデザイン・パターンを実装できます。

19.6 永続層の構築

永続層は、データベース内の表を表す永続性データ・オブジェクトがすべて含まれるEJBアプリケーションの一部です。EJB 3xで導入されたエンティティ・モデルはJava永続性APIで定義されているため、これらのビジネス・コンポーネントはJPAエンティティと呼ばれます。

19.6.1 JPAエンティティおよびJava永続性APIについて

JPAエンティティは、Oracle TopLinkおよびHibernateとシームレスに動作するよう設計された軽量永続性モデルを採用しています。

JPAエンティティの主な拡張機能は、次のとおりです。

  • POJOであるJPAエンティティ

  • O-Rマッピングのメタデータ注釈

  • 継承およびポリモフィズムのサポート

  • CRUD操作のためのEntityManager APIの簡素化

  • 問合せの拡張機能

19.6.1.1 POJOであるJPAエンティティ

JPAエンティティはPOJO (Plain Old Java Objects)であり、コンポーネント・インタフェースは不要です。JPAエンティティは、継承およびポリモフィズムもサポートしています。

例19-1は、単純なJPAエンティティのソース・コードを示しています。

例19-1 単純な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の場合と同様に、抽象クラスではなく具体的なクラスであることに注意してください。

19.6.1.2 O-Rマッピングのメタデータ注釈

O-Rマッピング注釈を使用すると、O-Rマッピング・メタデータを使用してエンティティを記述できます。その後、このメタデータは、エンティティの永続性および取得を定義するために使用されます。ベンダー固有のディスクリプタでO-R (オブジェクト・リレーショナル)マッピングを定義する必要はなくなります。

前述の例では、@Entity@Tableおよび@Column注釈を使用して、これがエンティティであることをクラス・レベルで指定するとともに、エンティティの基礎となるデータベース表と列名を指定しています。例19-2に示すように、マッピング注釈を使用して、エンティティ間の関連を定義することもできます。

例19-2 マッピング注釈

@ManyToOne(cascade=PERSIST) 
@JoinColumn(name="MANAGER_ID", referencedColumnName="EMP_ID") 
public Employee getManager() 
{
  return manager; 
}

19.6.1.3 継承およびポリモフィズムのサポート

継承は、様々な使用例で非常に役に立ちます。一般的に使用され、JPAエンティティ用のOracle Application Serverでサポートされる2つのタイプの継承は、次のとおりです。

  • クラス階層単位の単一表

  • 結合されたサブクラス戦略

継承は、注釈を使用して表すことができます。結合されたサブクラス戦略を使用するコード例を例19-3に示します。

例19-3 結合されたサブクラス戦略

@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 
{
...
}

19.6.1.4 CRUD操作のためのEntityManager APIの簡素化

javax.persistence.EntityManager APIは、エンティティ・インスタンスに対するCRUD (Create、Read、UpdateおよびDelete)操作に使用されます。インスタンスを参照して操作するために、コードを記述する必要はなくなります。例19-4のように、セッションBeanにEntityManagerのインスタンスを挿入し、EntityManagerインスタンスでpersist()またはfind()メソッドを使用して、エンティティBeanオブジェクトを作成または問い合せることができます。

例19-4 セッションBean内のEntityManager

@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); 
}
}

19.6.1.5 問合せの拡張機能

問合せはメタデータ内で定義します。ここでは、注釈を使用して、またはデプロイメント・ディスクリプタ内で問合せを指定できます。JPAエンティティは、JPQL (Java永続性問合せ言語)を介してバルク更新および削除操作をサポートします。詳細は、第19.6.7項「EJB/JPAの注釈」を参照してください。

19.6.2 JPAエンティティの作成方法

JDeveloperには、JPAエンティティを作成するための簡単なウィザードが2つ用意されています。オンライン・データベースまたはオフライン・データベースからのエンティティの作成、永続性ユニットの追加、継承戦略の定義、および使用可能なデータベース・フィールドからの選択が可能です。「表からのエンティティ」ウィザードを使用すると、オンライン・データベースまたはエミュレートされたオフライン・データベースや、アプリケーション・サーバー・データソースからエンティティを作成できます。


注意:

「エンティティBean(表ベース)」ウィザードを実行している際に、「一般オプション」ページで「生成されたエンティティごとにIDジェネレータをアタッチ」フィールドを構成した場合は、いずれを選択したかに応じて、オプション@SequenceGeneratorまたは@SequenceGeneratorに対してIDジェネレータを手動で構成する必要があります。追加の手順については、各エンティティ・クラスに生成されたJavadocを参照してください。


エンティティを作成、または表からエンティティを作成するには、次のようにします。

  1. メイン・メニューから「ファイル」→「新規」の順に選択します。

  2. 「新規ギャラリ」で、「ビジネス層」を開き、「EJB」を選択し、さらに「エンティティ」または「表からのエンティティ」を選択して、「OK」をクリックします。

    ヒント: よく使用される選択項目は、容易にアクセスできるように「ファイル」メニューに保存されます。

  3. 「エンティティ作成(表ベース)」または「エンティティの作成」ウィザードの手順を実行して、JPAエンティティを作成します。

    詳細は、随時[F1]を押すか、ウィザード内で「ヘルプ」をクリックしてください。

既存のプロジェクトにEJBを作成する手順は次のとおりです。

  1. 「アプリケーション」ウィンドウで、JPAエンティティを作成するプロジェクトを選択し、「新規」を選択します。

  2. 「新規ギャラリ」で、「ビジネス層」を開き、「EJB」を選択し、さらに「エンティティ」または「表からのエンティティ」を選択して、「OK」をクリックします。

    または、メイン・メニューから「ファイル」→「新規」を選択して「新規ギャラリ」を開き、ステップ2を実行します。

    ヒント: よく使用される選択項目は、容易にアクセスできるように「ファイル」メニューに保存されます。

  3. 「エンティティ作成(表ベース)」または「エンティティの作成」ウィザードの手順を実行します。

新規のプロジェクトにEJBを作成する手順は次のとおりです。

  1. メイン・メニューから「ファイル」→「新規」→「プロジェクト」を選択します。

  2. 「新規ギャラリ」で、作成するプロジェクトのタイプを選択し、「OK」をクリックします。

  3. 「アプリケーション」ウィンドウで、新規プロジェクトを右クリックして、「新規」を選択します(または、プロジェクトを選択して、メイン・メニューで「ファイル」→「新規」を選択します)。

    「新規ギャラリ」で、「ビジネス層」を開き、「EJB」を選択し、さらに「エンティティ」または「表からのエンティティ」を選択して、「OK」をクリックします。

    ヒント: よく使用される選択項目は、容易にアクセスできるように「ファイル」メニューに保存されます。

19.6.3 EJB/JPA用のSDOについて

JDeveloperは、SDO (サービス・データ・オブジェクト)データ・アプリケーション開発フレームワークをサポートします。

SDO 2.0フレームワークおよびAPIを使用すると、物理的にどのようにアクセスされているかに関係なくビジネス・データを簡単に修正できます。SDOは、バックエンド・データソースをカプセル化し、静的または動的なプログラミング・スタイルの選択肢を提供し、接続されたアクセスと切断されたアクセスの両方をサポートします。SDOは、XMLパーサー操作を処理し、データ解析ロジックを自動的にアプリケーションに統合します。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のサービス対応のアプリケーション・モジュールの統合に関する項を参照してください。

JDeveloperによってサポートされるSDOアーキテクチャには、次の機能があります。

  • Java EEデータ・プログラミング・モデルの簡素化

  • サービス指向アーキテクチャ(SOA)内のデータの抽出

  • クライアント間のデータの受渡しに関する標準的方法の作成によるデータ・アプリケーション開発の統合

  • XMLのサポートおよび統合

  • Java EEパターンおよびベスト・プラクティスの導入

SDOは、切断されたデータ・グラフの概念に基づくデータ・アプリケーション用の統合フレームワークです。データ・グラフは、ツリー構造またはグラフ構造のデータ・オブジェクトのコレクションです。データ・オブジェクトを操作する汎用コードまたはフレームワーク・コードの開発を実現するには、データ・オブジェクトのデータ・モデルを公開するデータ・オブジェクト・メタデータに対するイントロスペクションが可能であることが重要です。Javaリフレクションの代替策として、SDOは、EJB Beanに詳述されているエンティティまたはデータ・モデル情報に基づいて、作成するXMLスキーマ定義(XSD)ファイルに格納されているメタデータにアクセスするためのAPIを提供します。

19.6.4 SOAプラットフォームへのデプロイメント用のEJB/POJOベースのADF-BCサービスの使用

JDeveloperのSDO機能は、EJBサービスまたはADF-BCサービスとして使用できます。ADF-BCサービスの使用を選択する場合、weblogic-application.xmlファイルにリスナー参照を追加する必要があります。詳細は、第19.6.5項「JPAエンティティ用のSDOサービス・インタフェースの作成方法」を参照してください。

SDOの詳細および仕様は、OSOA (Open Service Oriented Architecture) (http://www.oasis-opencsa.org/sdo)を参照してください。

19.6.5 JPAエンティティ用のSDOサービス・インタフェースの作成方法

EJBセッションBeanまたはPlain Old Java Object (POJO)を介してJPAエンティティ・データにアクセスするためのサービス・インタフェースAPIを簡単に作成できます。このサービス・クラスは、JDeveloper Java EEアプリケーション内のJPAエンティティを作成、取得、更新および削除するための操作を公開します。

SDOサービス・インタフェースを作成するには、次のようにします。

  1. 1つ以上のJPAエンティティに対するCRUD操作を公開するEJBセッションBeanまたは通常のJavaクラス(POJO)から開始します。

    ウィザードを使用してセッションBeanを作成できます。詳細は、第19.7.2項「セッションBeanの作成方法」を参照してください。

  2. 「構造」ウィンドウで、EJBセッションBeanまたはPOJOを右クリックして「サービス・インタフェースの作成」を選択します。

  3. サービスAPIで使用可能にするメソッドを選択します。

    デフォルトでは、セッションBeanインタフェース内のすべてのメソッドが選択されます。チェック・ボックスをクリックし、メソッドを選択するか選択を解除します。

  4. このリリースでは、サービス・インタフェースを作成すると、元のセッションBeanファイルおよびリモート(またはローカル)インタフェースが変更されます。元のメソッドと一致する新規メソッドが追加されますが、これらは、JPAエンティティではなく、新しく定義されたSDOデータ・オブジェクトを参照します。これらのSDOデータ・オブジェクトは、JPAエンティティと一致し、XSDファイル(これもプロジェクトに追加されます)で定義され、これらの名前にはDeptSDOEmployeeSDOなどのようにSDOが付けられます。「バックアップ・ファイル」を選択し、元のセッションBeanファイルのバックアップを作成します。

  5. 「OK」をクリックします。

19.6.5.1 SOAプラットフォームへのデプロイメント用のEJB/POJOベースのADF-BCサービスの構成方法

SDO外部バインディングを使用してファブリック・コンポジットからEJB/POJO SDO ADF-BCサービスを使用するには、ServiceRegistryロジックを呼び出すためのWeblogicアプリケーション・デプロイメント・リスナーを設定する必要があります。これを設定するには、weblogic-application.xmlファイルにリスナー参照を追加します。

リスナー参照を追加するには、次のようにします。

デフォルトでは<workspace-directory>/src/META-INFにあるweblogic-application.xml例19-5のコードを追加します。

例19-5 weblogic-application.xmlに追加するコード

<listener>
<listener-class> oracle.jbo.client.svc.ADFApplicationLifecycleListener
</listener-class>
</listener>

このリスナーが追加されると、SDOサービス・アプリケーション名_JBOServiceRegistry_composite.xml内のファブリック・サービス・レジストリに自動的に登録されます。

19.6.5.2 SDOアーキテクチャをサポートするために作成されるファイル・タイプ

SDOサービス・インタフェースを作成すると、サービス・インタフェースをサポートするために必要なファイルが自動的に作成されます。これらのファイルには、次のものがあります。

  • SessionEJBBeanWS.wsdl - このファイルには、SOAアプリケーションへのエントリ・ポイントまたはSOAアプリケーションからの参照ポイントを提供するサービスの機能が記述されています。WSDLファイルは標準規約言語を提供するもので、サービスの機能を理解する場合に必須です。

  • SessionEJBBeanWS.xsd - これは、SDOデータ型の観点からサービス・インタフェース・メソッドを定義するXMLスキーマ・ファイルです。セッションBeanインタフェースに含まれていたすべてのエンティティがこのスキーマ・ファイル内で対応するDataObject要素を持ちます。実行時には、XSDHelper.INSTANCE.define()メソッドを呼び出すことにより、これらのDataObjectにSDOランタイムが登録されます。SDOタイプごとに静的タイプ固有のDataObjectが定義されます。

19.6.6 JPAエンティティからのデータベース表の生成方法

JDeveloper統合サーバーにJPAエンティティをデプロイすると、対応する既存の表がマップされていないすべてのエンティティにデータベース表が自動的に作成されます。マップされていないJPAエンティティごとに、1つのデータベース表が生成されます。


注意:

主キー参照整合性制約が生成されますが、その他の制約は生成されない場合があります。


JPAエンティティからデータベース表を生成するには、次のようにします。

  1. モデリング・ツールまたは「エンティティの作成」ウィザードを使用して、JPAエンティティを作成します。詳細は、第19.6.2項「JPAエンティティの作成方法」を参照してください。

  2. 必要に応じてエンティティを変更し、フィールドおよび制約を追加します。

  3. 表に名前を付けます。

  4. 永続性ユニットをデプロイします。詳細は、第19.10項「EJBモジュールおよびJPA永続性ユニットのデプロイ」を参照してください。

19.6.7 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の前のバージョンでは使用できません。


デザインタイム時には、「プロパティ」ウィンドウを通して使用可能な注釈のリストが表示されます。注釈機能を使用すると、任意の適切なJavaクラスをEJBまたはJPAコンポーネントに変更できます。詳細は、第19.6.8項「Javaクラスの注釈方法」を参照してください。

19.6.7.1 EJB 3.x

注釈を使用してBeanタイプを示すことができます。Beanタイプの注釈を標準クラスに追加すると、EJBになります。

次のタイプの注釈を使用できます。

  • ステートレス・セッションBeanです。「True」または「False」を選択し、ステートレス・セッションBeanとしてクラスに注釈を付けます。

  • ステートフル・セッションBeanです。「True」または「False」を選択し、ステートフル・セッションBeanとしてクラスに注釈を付けます。

  • これは、シングルトン・セッションBeanです。「True」または「False」を選択し、シングルトン・セッションBeanとしてクラスに注釈を付けます。

  • メッセージドリブンBeanです。「True」または「False」を選択し、メッセージドリブンBeanとしてクラスに注釈を付けます。

19.6.7.2 JPA 2.0

注釈は、新規Java永続性APIをエンティティBeanの代替手段としてサポートします。

次のタイプの注釈を使用できます。

  • JPAエンティティです。「True」または「False」を選択し、JPAエンティティとしてクラスに注釈を付けます。

  • JPAマップされたスーパークラスです。「True」または「False」を選択し、JPAマップされたスーパークラスとしてクラスに注釈を付けます。

  • JPA埋込み可能です。「True」または「False」を選択し、JPA埋込み可能としてクラスに注釈を付けます。

標準JavaクラスをEJB/JPAコンポーネントに変換した後、またはEJB/JPAウィザードの1つを使用してコンポーネントを作成した場合、「プロパティ」ウィンドウには、異なるコンテキスト・オプション・セットが表示され、これを使用して、コンポーネント・クラス内の様々なメンバーの注釈を追加または編集できます。

19.6.8 Javaクラスの注釈方法

設計時には、クラスに挿入可能な注釈のリストが表示されます。これらのオプションは、使用しているクラスのタイプや選択したメンバーの内容によって異なります。

任意の標準Javaクラスに注釈を付けてEJB/JPAコンポーネントにすることができます。注釈を使用してクラスをEJB/JPAとして定義した後、JDeveloperの「プロパティ」ウィンドウ内で選択可能な様々なメンバー・レベルの注釈を使用してコンポーネントを簡単にカスタマイズできます。


注意:

注釈はEJB 3xでのみ使用可能であり、EJBの前のバージョンでは使用できません。


JavaクラスにEJB/JPAコンポーネントとして注釈を付けるには、次のようにします。

  1. 「アプリケーション」ウィンドウで、変換するクラスを選択します。

  2. 「構造」ウィンドウで、クラス名をダブルクリックします。

    クラスがJavaソース・エディタで開いている場合、クラス定義行にカーソルを置きます。

  3. 「プロパティ」ウィンドウを開き、「EJB」/「JPA」タブを選択して、作成するコンポーネントのタイプを選択します。「True」を選択します。

JavaクラスがEJB/JPAコンポーネントとして注釈を付けられると、「プロパティ」ウィンドウでは「EJB/JPA」タブが表示されなくなり、選択したコンポーネント・タイプに固有の新規タブが表示されます。コンポーネントを標準Javaクラスに戻すには、コードから注釈を削除し、「プロパティ」ウィンドウに表示されているEJB/JPAコンポーネント・タイプをリセットします。


注意:

ウィザードを介して作成されたEJBまたはJPAコンポーネントには、すでにクラス・タイプの注釈が含まれます。詳細は、第19.3項「EJB 3xアプリケーションのビルドおよび開発プロセス」を参照してください。


クラス・レベルの注釈を使用してJavaクラスがEJB/JPAコンポーネントに変換されたら、「プロパティ」ウィンドウを使用して、このコンポーネント内のメンバー・フィールドまたはメソッドに対する注釈を追加または編集します。

EJB/JPAコンポーネント内の注釈を追加または編集するには、次のようにします。

  1. 「アプリケーション」ウィンドウで、注釈をつけるクラスを選択します。

  2. 「構造」ウィンドウで、注釈を付けるメンバーをダブルクリックします。

    クラスがJavaソース・エディタで開いている場合、かわりに注釈を挿入する場所にカーソルを置きます。

  3. 「プロパティ」ウィンドウで、指定したEJB/JPAタイプに対応するタブを選択します。

  4. 選択した特定のメンバーで使用可能な任意の注釈から選択します。

19.6.9 エンティティ間の関連の表現

データベース表からエンティティを作成すると、外部キーはエンティティ間の関連として解析されます。これらの関連をさらに定義したり、新規関連を作成したり、JDeveloperのモデリング・ツールを使用して既存の関連を既存の表にマップできます。モデリング・ツールを使用すると、関連をエンティティ間の線で表したり、線の構成を変更することによって関連を変更できます。詳細は、第5.7項「EJB/JPAコンポーネントのモデル化」を参照してください。

19.6.10 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によって表されるリモート・インタフェースを返すために内部で使用されます。

19.6.11 JPAオブジェクト・リレーショナル・マッピング

Java永続性APIを使用すると、Java EE 5アプリケーション・サーバーの内部とEJBコンテナの外部の両方で動作する標準的で移植可能な方法でJavaオブジェクトをリレーショナル・データベース表に宣言的にマップできます。このアプローチの場合、Java永続性が大幅に簡素化され、オブジェクト・リレーショナル・マッピング・アプローチが提供されます。

Oracle TopLinkでは、Javaソース・コード内のメタデータ注釈を使用してエンティティのJPA動作を構成できます。実行時に、コードは対応するJavaクラス・ファイルにコンパイルされます。

JavaクラスをJPAエンティティとして指定するには、例19-6に示すように、@Entity注釈を使用します。

例19-6 エンティティ注釈

@Entity
public class Employee implements Serializable {
...
}

注釈を選択して追加し、デプロイメント・ディスクリプタに指定されているデフォルトをオーバーライドできます。

JPA注釈の詳細は、TopLink JPA注釈参照(http://www.oracle.com/technetwork/middleware/ias/toplink-jpa-annotations-096251.html)を参照してください。

19.6.12 Javaサービス・ファサードの使用方法

Javaサービス・ファサードは、アプリケーション・サーバーなしで実行可能な軽量テスト環境を実装します。EJB 3xの場合、Javaサービス・ファサードは、コンテナなしで同じ永続性ユニットのエンティティに対してファサード・メソッドを生成できるため、EJBセッション・ファサードと類似しています。

ワークフローをJavaサービス・ファサードと分離すると、参加者JPAオブジェクトにクライアントが直接依存しなくなるため、設計の柔軟性が高まります。参加者を変更するにはJavaサービス・ファサードの変更が必要になる可能性がありますが、ワークフローをファサード内で集中管理すると、このような変更をより管理しやすくなります。すべてのクライアントを変更しなくてもJavaサービス・ファサードを変更するだけですみます。また、ワークフローの職責がセッション・ファサードに委任されたため、クライアント・コードもより単純になりました。クライアントは、ビジネス・オブジェクト間の複雑なワークフロー相互作用を管理する必要がなくなっただけでなく、ビジネス・オブジェクト間の相互依存性も認識する必要はありません。

main()メソッドを使用してサンプルJavaクライアントを生成してJavaサービス・クラスを実行可能にすることを選択できます。

JDeveloperの「Javaサービス・ファサード」ウィザードは、エンティティに対するサービス・ファサードとしてJavaクラスを作成する際に使用します。新規Javaサービス・ファサードを作成するには、メイン・メニューから「ファイル」→「新規」を選択し、さらに「新規ギャラリ」「ビジネス層」を開いて「EJB」を選択し、「Javaサービス・ファサード」を選択して「OK」をクリックします。

また、サービス・ファサードからデータ・コントロールを作成することもできます。「アプリケーション」ウィンドウで、サービス・ファサードの名前を右クリックして「データ・コントロールの作成」を選択します。「Beanデータ・コントロール・インタフェース・チューザ」ダイアログから、oracle.binding.*データ・コントロール・インタフェースの実装を選択できます。このインタフェースには、TransactionalDataControlUpdatableDataControlおよびManagedDataControlがあります。詳細は、ダイアログで「ヘルプ」ボタンを選択してください。

19.6.13 エンティティの主キーの定義方法

主キーは、1つ以上の持続属性を持つ一意の識別子です。これは、同じタイプの他のすべてのインスタンスからクラスの1つのインスタンスを識別します。主キーは、リレーションシップの定義および問合せの定義に使用します。

JPAエンティティ・インスタンスごとに1つの主キーが必要です。データベース・スキーマに応じて、永続フィールドからシンプル主キーを定義したり、複数の永続フィールドからコンポジット主キーを定義できます。また、自動主キー値生成を定義し、JPAエンティティ実装を簡素化することもできます。

シンプル主キーを指定する最も簡単な方法は、単一のプリミティブに対する注釈を使用するか、JDKオブジェクト・タイプ・エンティティ・フィールドを主キーとして使用することです。また、マッピング・ディスクリプタXML (orm.xmlファイル)を使用して、デプロイ時にシンプル主キーを指定することもできます。

注釈を使用してシンプル主キーを構成するには、次のようにします。

  1. JPAエンティティ実装で、例19-7に示すように、@Id注釈を使用して主キー・フィールドに注釈を付けます。

    例19-7 注釈を使用した主キーの構成

    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;
    }
    ...
    }
    
  2. アプリケーションをパッケージ化し、デプロイします。

マッピング・ディスクリプタ(orm.xml)を使用してエンティティのマッピングを構成する手順は次のとおりです。

永続性ユニットに対してマッピング・ファイル(orm.xml)を作成します。

  1. 「概要」エディタでpersistence.xmlファイルを開きます。

  2. 「一般」タブを選択し、「JPAマッピング・ディスクリプタ」セクションで、「新規のJPAマッピング・ディスクリプタの作成」をクリックします。

  3. 「概要」エディタでorm.xmlファイルを開きます。

  4. 目的のエンティティを追加するには、「一般」タブを選択し、さらに「マップされたクラス」を選択し、「エンティティ」を選択した後で[+]ボタンをクリックします。

    orm.xmlファイルが作成され、1つのエンティティに対してエントリが追加されます。そのエンティティにマッピングを追加する際、注釈またはXML(または、その両方)を使用してマッピングを保存するよう要求されます。

orm.xmlファイルでのIDマッピングの構成

  1. 「概要」エディタで、マッピング・ディスクリプタ(orm.xml)を使用してエンティティ・マッピングを構成する手順に関する項で作成したorm.xmlをダブルクリックします。

  2. 「構造」ペインで、作成したエンティティが表示されるまでペインを拡大します。その後で、目的の「ID」フィールドを右クリックして「マップ」→「ID」を選択します。要求されたら、XMLを選択してorm.xmlファイル内にメタデータを永続させます。これは、例19-8に示すように表示されます。

    例19-8 マッピングXMLを使用した主キーの構成

    <?xml version="1.0" encoding="windows-1252" ?>
    <entity-mappings xmlns="<a target="_blank" href="http://www.eclipse.org/eclipselink/xsds/persistence/orm"">http://www.eclipse.org/eclipselink/xsds/persistence/orm"</a>
                     xmlns:xsi="<a target="_blank" href="http://www.w3.org/2001/XMLSchema-instance"">http://www.w3.org/2001/XMLSchema-instance"</a>
                     xsi:schemaLocation="<a target="_blank" href="http://www.eclipse.org/eclipselink/xsds/persistence/orm">http://www.eclipse.org/eclipselink/xsds/persistence/orm</a> <a target="_blank"                  href="http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_4.xsd"">http://www.eclipse.org/eclipselink/xsds/eclipselink_orm_2_4.xsd"</a>
                     version="2.4">
      <entity class="model1.Departments">
        <attributes>
          <id name="departmentId"/>
        </attributes>
      </entity>
    </entity-mappings>
    

19.7 セッションBeanでのビジネス・プロセスの実装

セッションBeanは、アプリケーション・サーバー内の単一クライアントを表します。サーバー上でデプロイされたアプリケーションにアクセスするために、クライアントはセッションBeanメソッドを呼び出します。セッションBeanは、サーバー内でビジネス・タスクを実行することによってクライアントに複雑な処理が及ばないようにしながら、クライアントのために処理を実行します。セッションBeanは、インタラクティブ・セッションと類似しています。インタラクティブ・セッションに関わることができるのは1人のユーザーのみであるのと同じように、セッションBeanは共有されず、1つのクライアントのみが関わります。インタラクティブ・セッションの場合と同様、セッションBeanはデータをデータベースに保存しないため、永続的ではありません。クライアントが終了すると、セッションBeanは終了したように見え、クライアントとは関係なくなります。

JDeveloperの「セッションBean」ウィザードを使用して、セッションBeanおよびセッションBeanファサードを作成します。詳細は、第19.7.2項「セッションBeanの作成方法」を参照してください。

セッションBeanには、次のように3種類あります。

19.7.1 セッション・ファサードの使用

JDeveloperでは、「セッションBean作成」ウィザードを介してセッションBeanを作成する場合は常に、セッション・ファサード・メソッドの自動生成を選択できます。これにより、ビジネス・ワークフローのセッション・ファサードとして機能するセッションBeanが作成されます。詳細は、第19.7.2項「セッションBeanの作成方法」を参照してください。

セッション・ファサードはセッションBeanとして実装されます。セッションBeanファサードは、アプリケーションのビジネス・サービスに対して単一のインタフェースを提供することにより、ワークフローに参加するビジネス・オブジェクト間の複雑な相互作用をカプセル化します。セッション・ファサードは、多数のBusinessObjects間の関連を管理し、クライアントに対して高度な抽象化を提供します。

セッション・ファサードにはステートフル、ステートレス、またはシングルトンのいずれでも使用できます。これは、ウィザードでセッション・ファサードを作成する際に定義します。

セッション・ファサードの詳細は、Oracle Technology Network (http://www.oracle.com/technetwork/java/sessionfacade-141285.html)を参照してください。

ウィザードを使用して、セッションBeanの作成時にセッション・ファサードを自動的に実装して、実装するメソッドを選択します。EJBエンティティを作成すると、同じプロジェクト内で作成するセッションBeanは、公開するエンティティおよびメソッドを認識します。

19.7.2 セッションBeanの作成方法

セッションBeanウィザードを使用して、新規のセッションBeanまたはセッション・ファサードBeanを作成します。また、モデリング・ツールを使用してセッションBeanを作成することもできます。

ウィザードを使用してセッションBeanまたはセッション・ファサードを作成するには、次のようにします。

  1. メイン・メニューから「ファイル」→「新規」の順に選択します。

  2. 「新規ギャラリ」で、「ビジネス層」を開いて「EJB」を選択し、さらに「セッションBean」を選択して、「OK」をクリックします。

    ヒント: よく使用される選択項目は、容易にアクセスできるように「ファイル」メニューに保存されます。


    注意:

    セッション・ファサードBeanを生成するには、永続性ユニットがすでに作成されている必要があります。永続性ユニットを生成するには同じステップに従いますが、「セッションBean」ではなく「JPA永続性ユニット」を選択します。


  3. Beanをセッション・ファサードにするには、「EJBの名前とオプション」ページで「セッション・ファサード・メソッドの生成」を選択します。

    詳細は、随時[F1]を押すか、ウィザード内で「ヘルプ」をクリックしてください。

  4. 「セッションBean作成」ウィザードで、その他の手順をすべて実行します。

セッションBeanファサード・メソッドを追加または削除するには、次のようにします。

  1. 「アプリケーション」ウィンドウで、編集するセッションBeanを選択します。

  2. 右クリックして「セッション・ファサードの編集」を選択します。

  3. 「セッション・ファサード・オプションの指定」ダイアログで、リスト上のメソッドを選択してメソッドがファサードを介して公開されるようにするか、メソッドの選択を解除してメソッドが公開されないようにします。

セッション・ファサードの詳細は、コアJ2EEパターン・カタログ(http://www.oracle.com/technetwork/java/sessionfacade-141285.html)を参照してください。

セッションBeanとエンティティ間のローカル参照を作成して、セッション・ファサードを手動で作成することもできます。

ローカル参照を作成するには、次のようにします。

  1. まだ作成していない場合は、セッションBeanを作成します。

  2. Bean間にローカル参照を作成します。

    • Beanクラスの場合: EJB 3xを使用している場合は、Beanクラスに注釈を付けて参照を作成します。

    • EJBモジュール・エディタを使用する場合: EJB 2.1 (および以前のバージョン)を使用している場合は、「アプリケーション」ウィンドウでEJBノードを選択し、「構造」ペインで「メソッド」をダブルクリックし、「EJBモジュール・エディタ」を開きます。「EJBローカル参照」を選択します。

EJBダイアグラムでセッションBeanを作成するには、次のようにします。

  1. 「アプリケーション」ウィンドウから、EJBダイアグラムを開きます。

    EJBダイアグラムを使用していない場合は、メイン・メニューから「ファイル」→「新規」を選択します。「新規ギャラリ」で、「ビジネス層」を開いて「EJBダイアグラム」を選択し、「OK」をクリックします。

  2. 「コンポーネント」ウィンドウで、「セッションBean」をクリックします。

    「コンポーネント」ウィンドウが表示されない場合は、「表示」メニューから「コンポーネント」を選択します。

  3. EJBダイアグラムの中をクリックします(ドラッグ・アンド・ドロップしないでください)。

19.7.3 EJBモジュールでのセッションBeanの作成方法

新規EJBモジュールと既存のEJBモジュールの両方でセッションBeanを作成できます。

既存のEJBモジュールにセッションBeanを作成する手順は次のとおりです。

  1. 「アプリケーション」ウィンドウで、EJBプロジェクトを右クリックして、「新規」→「セッションBean」を選択します。

    または、プロジェクトを選択して、メイン・メニューで「ファイル」→「新規」→「ギャラリから」を選択します。「新規ギャラリ」で、「ビジネス層」を開いて「EJB」を選択し、さらに「セッションBean」を選択して、「OK」をクリックします。

  2. 「セッションBean作成」ウィザードの手順を実行します。

新規のEJBモジュールにセッションBeanを作成する手順は次のとおりです。

  1. 「アプリケーション」ウィンドウで、「ファイル」→「新規」→「プロジェクト」を選択します。

  2. 「新規ギャラリ」で、作成するプロジェクトのタイプを選択し、「OK」をクリックします。

  3. 「アプリケーション」ウィンドウで、新規プロジェクトを右クリックして、「新規」→「ギャラリから」を選択します。「新規ギャラリ」で、「ビジネス層」のカテゴリを開いて「EJB」を選択し、さらに「セッションBean」を選択して、「OK」をクリックします。

    または、プロジェクトを選択して、「新規」→「セッションBean」を選択します。

  4. 「セッションBean作成」ウィザードの手順を実行します。

19.7.4 EJBモジュールでのメッセージドリブンBeanの作成方法

新規モジュールと既存のモジュールの両方でEJBを作成できます。

既存のEJBモジュールにメッセージドリブンBeanを作成する手順は次のとおりです。

  1. 「アプリケーション」ウィンドウで、EJBプロジェクトを右クリックして、「新規」→「メッセージドリブンBean」を選択します。

    または、プロジェクトを選択して、メイン・メニューで「ファイル」→「新規」→「ギャラリから」を選択します。「新規ギャラリ」で、「ビジネス層」を開いて「EJB」を選択し、さらに「メッセージドリブンBean」を選択して、「OK」をクリックします。

  2. 「メッセージドリブンBean作成」ウィザードの手順を実行します。

新規のEJBモジュールにメッセージドリブンBeanを作成する手順は次のとおりです。

  1. 「アプリケーション」ウィンドウで、「ファイル」→「新規」→「プロジェクト」を選択します。

  2. 「新規ギャラリ」で、作成するプロジェクトのタイプを選択し、「OK」をクリックします。

  3. 「アプリケーション」ウィンドウで、新規プロジェクトを右クリックして、「新規」→「ギャラリから」を選択します。「新規ギャラリ」で、「ビジネス層」のカテゴリを開いて「EJB」を選択し、さらに「メッセージドリブンBean」を選択して、「OK」をクリックします。

    または、プロジェクトを選択して、「新規」→「メッセージドリブンBean」を選択します。

  4. 「メッセージドリブンBean作成」ウィザードの手順を実行します。

19.7.5 EJBメソッドの追加、削除および編集方法

プロジェクトにEJBが追加された後、そこに含まれるメソッドを追加、削除または編集できます。次で説明するようにメソッドを追加すると、定義時に変更がリモート・インタフェースとホーム・インタフェースで同期化されます。

メソッドを追加する手順は次のとおりです。

  1. 「アプリケーション」ウィンドウで、EJBを選択します。

  2. 構造ペインでEJBを右クリックし、「Enterprise Java Bean (EJB)」「新規メソッド」を選択します。

  3. 「Beanメソッドの詳細」ダイアログで、必要に応じて詳細を追加します。

  4. 完了後、「OK」をクリックします。

メソッドを削除する手順は次のとおりです。

  1. 「アプリケーション」ウィンドウで、EJBを選択します。

  2. 構造ペインで、メソッドをダブルクリックしてソース・ファイル内で検索します。

  3. ソース・ファイルで、メソッドを削除します。

メソッドを編集する手順は次のとおりです。

  1. 「アプリケーション」ウィンドウで、EJBを選択します。

  2. 構造ペインで、EJBを右クリックし、「Enterprise Java Bean (EJB)」「プロパティ」を選択します。

  3. 「Beanメソッドの詳細」ダイアログで、必要に応じて詳細を編集します。

  4. 完了後、「OK」をクリックします。

19.7.6 EJBへのフィールドの追加方法

EJBダイアグラムまたはEJBモジュール・エディタを介して、EJBにフィールドを追加できます。

  1. 「アプリケーション」ウィンドウで、EJBを選択します。

  2. 構造ペインで、EJBを右クリックし、「Enterprise Java Bean (EJB)」ノード→「新規フィールド」を選択します。

  3. 「フィールド詳細」ダイアログで、必要に応じて詳細を追加します。

  4. 完了後、「OK」をクリックします。

19.7.7 EJBからのフィールドの削除方法

次に示すように、フィールドをEJBから削除できます。

EJBダイアグラム上のフィールドを削除するには、次のようにします。

  1. EJB上のフィールド・コンパートメント(最初のコンパートメント)をクリックします。

  2. フィールドを強調表示して[Del]キーを押します。

「アプリケーション」ウィンドウを使用してフィールドを削除する手順は次のとおりです。

  1. 「アプリケーション」ウィンドウで、EJBを選択します。

  2. 構造ペインで、フィールドをダブルクリックしてソース・ファイル内で検索します。

  3. ソース・ファイルで、フィールドを削除します。

19.7.8 EJB環境エントリを使用したビジネス・ロジックのカスタマイズ

環境エントリは、Beanのビジネス・ロジックをカスタマイズできる名前と値のペアです。環境エントリはエンタープライズBeanのデプロイメント・ディスクリプタに格納されるため、ソース・コードを変更せずにBeanのビジネス・ロジックを変更できます。

たとえば、注文を計算するEJBは、受注数量や特定のステータス(シルバー、ゴールド、プラチナ)に応じて、あるいは販売促進のために、割引きを行うことがあります。Beanのアプリケーションをデプロイする前に、特定の割引率を指定できます。アプリケーションを実行すると、メソッドは環境エントリをコールして割引値を調べます。別のデプロイメントについてその割引率を変更する場合、ソース・コードを変更する必要はなく、デプロイメント・ディスクリプタの環境エントリの値を変更するだけです。

ソース・コードで環境エントリに注釈を付けます。

完全なEJB 3x Java Community Processの仕様およびドキュメントは、http://www.oracle.com/technetwork/java/docs-135218.htmlを参照してください。

19.7.9 クライアントへのデータの公開

クライアントにデータを公開する方法は、アプリケーションの開発方法に応じて異なります。

19.7.10 リソース参照の識別方法

リソース参照は、リソースに対するコンポーネントのコード名を識別するデプロイメント・ディスクリプタ内の要素です。リソース参照は、コネクタおよびデータベース接続を取得するため、ならびにJMS接続ファクトリ、JavaMailセッションおよびURLリンクにアクセスするために使用されます。

EJB 3xリソース参照を追加または変更する手順は次のとおりです。

ソース・コードに移動し、リソース参照に注釈を付けます。

19.7.11 ADFバインディングの主キーの指定方法

特定のADF Faces機能では、主キーを指定する必要があります。たとえば、af:tableSelectManyコンポーネントを使用するADF Faces表がある場合、ソートを実装するために主キーを指定する必要があります。EJB/JPAエンティティを表から(EJB 3xを使用して)作成する場合、デフォルトでは主キーが指定されます。しかし、主キーを指定する必要がある場合は、次を実行します。

属性を主キーとして指定するには、次のようにします。

  1. ADFデータ・コントロールを作成して、エンティティ別にXML定義を作成します。詳細は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』のADFデータ・コントロールの使用に関する項を参照してください。

  2. 「アプリケーション」ウィンドウで、EJBエンティティのXMLファイルを選択します。

  3. 「構造」ウィンドウでエンティティ属性を選択し、さらに「表示」メニューから「プロパティ」を選択します。

  4. 「プロパティ」ウィンドウで主キーとして必要な属性を検索し、「主キー」の値を「True」に設定します。

19.7.12 EJBのADFデータ・コントロールの使用方法

JDeveloperでは、ADF Fusion Webアプリケーションを構築する際にデータ・コントロール・コンポーネントの完全セットが自動的に提供されます。Java EEアプリケーションまたはEJBプロジェクト(あるいはその両方)を構築する場合、個別セッションBeanでADFデータ・コントロールを割り当てます。これにより、Beanと同じ名前のデータ・コントロール・ファイルが追加されます。

詳細は、『Oracle ADFデータ・コントロールによるアプリケーションの開発』のADFデータ・コントロールの使用に関する項を参照してください。

19.8 ダイアグラムでのEJB/JPAコンポーネントのモデル化

ダイアグラムでのEJBおよびJPAコンポーネントのモデル化の詳細は、第5.7項「EJB/JPAコンポーネントのモデル化」を参照してください。

19.9 Webアプリケーションの一部としてのEJBのデプロイ

EJB 3.1では、エンタープライズBeanクラスはejb-jarファイルにパッケージ化する必要があるという制約が解除されています。したがって、EJBクラスは、Webアプリケーション・クラスに適用されるものと同じパッケージ化ガイドラインを使用して、Webアプリケーション・アーカイブ(WAR)の中に直接パッケージ化できます。EJBクラスをWEB-INF/classesディレクトリに置くか、WEB-INF/libディレクトリ内のJARファイルに入れるだけです。オプションとして、EJBデプロイメント・ディスクリプタを使用している場合は、WEB-INF/ejb-jar.xmlとしてパッケージ化することもできます。

19.10 EJBモジュールおよびJPA永続性ユニットのデプロイ

EJBモジュールは、1つ以上のEJB、永続性ユニットおよびオプションのEJBデプロイメント・ディスクリプタで構成されるソフトウェア・ユニットです。1つのJDeveloperプロジェクトに含まれるのは、1つのEJBモジュールのみです。デプロイ時には、モジュールはejb.jarファイルとしてパッケージ化されます。

19.10.1 JPAエンティティBeanのデプロイ

エンティティBeanは以前、セッションBeanおよびメッセージドリブンBeanとともにEJB JARファイルに1回だけパッケージ化されていました。しかし、JPAエンティティおよび永続性ユニットのテクノロジにより、これらはデプロイ時に独自のJARファイルpersistenceunit.jarにパッケージ化されます。

この方法により、エンティティBean (JPAエンティティ)は、persistence.xmlファイルが含まれているJPA永続性アーカイブJARに個別に格納されます。JPA永続性ユニットはEJBモジュール・パッケージの一部である必要はなく、the ejb.jarファイル内にバンドルできます。

19.10.2 EJBモジュールについて

1つのJDeveloperプロジェクトに含まれるのは、1つのEJBモジュールのみです。プロジェクト内で最初のセッションBeanまたはメッセージドリブンBeanを作成する場合、モジュールが存在しなければ、モジュールは自動的に作成されます。新規EJBモジュールのEJBバージョンと永続性マネージャは選択できます。

プロジェクトをデプロイする場合、セッションBeanおよびメッセージドリブンBeanとデプロイメント・ディスクリプタの集合を、アプリケーション・サーバーへのデプロイメントまたはアーカイブ・ファイルとしてのデプロイメントの準備が整っているEJB JARファイル(.jarファイル)に変換します。永続性ユニットを独自のJARファイルに限定することにより、永続性ユニットを他のアプリケーションで簡単に再利用できるようになります。詳細は、第9.1項「アプリケーションのデプロイについて」を参照してください。

19.10.3 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ファイルが作成されます。詳細は、第9.1項「アプリケーションのデプロイについて」を参照してください。

19.10.4 JPA永続性ユニットの作成方法

「永続性ユニット」ウィザードを使用してエンティティの永続性ユニットを作成できます。また、JPAエンティティを作成する場合、デフォルトの永続性ユニットがまだない場合はこれが作成されます。

JPA永続性ユニットを作成するには、次のようにします。

  1. 「アプリケーション」ウィンドウでプロジェクトを選択して、「ファイル」メニューから「新規」→「ギャラリから」を選択します。

  2. 「新規ギャラリ」から「ビジネス層」を開いて「EJB」を選択し、さらに「JPA永続性ユニット」を選択して、「OK」をクリックします。

  3. 「新規の永続性ユニット」ウィザードのステップを完了します。

19.10.5 モジュール内のEJBの削除方法

EJBモジュールからEJBを削除するには、「アプリケーション」ウィンドウでEJBを選択して、「削除」を押します。

19.10.6 JDeveloperへのEJBのインポート方法

JARファイルまたはデプロイメント・ディスクリプタから既存のEJBをインポートできます。

EJBモジュール、またはEJBモジュール内のEJBのサブセットをプロジェクトにインポートするには、次のようにします。

  1. 「ファイル」メニューから「インポート」を選択します。

  2. 「インポート」ダイアログで「EJB JARファイル(.jar)」を選択します。

  3. 「インポート」ウィザードの手順を実行します。

EJBデプロイメント・ディスクリプタ・ファイル(ejb-jar.xml)をインポートするには、次のようにします。

  1. 「ファイル」メニューから「インポート」を選択します。

  2. 「インポート」ダイアログで「EJBデプロイメント・ディスクリプタ・ファイル(ejb-jar.xml)」を選択します。

  3. 「インポート」ウィザードの手順を実行します。


    注意:

    このウィザードを使用してデプロイメント・ディスクリプタをインポートした後、同じウィザードで他のファイルをインポートすると、最後に使用したディスクリプタ・ファイル、JARファイルおよびIDE設定ファイル内のディスクリプタ・ソース・ディレクトリがキャッシュされるので便利です。これにより、たとえば、EJBモジュールを複数のモジュールに分割する、同じディレクトリ内にある複数のJARファイルをインポートする、などのタスクが容易になります。


WebLogicデプロイメント・ディスクリプタ・ファイル(weblogic-ejb-jar.xml)をインポートするには、次のようにします。

  1. 「ファイル」メニューから「インポート」を選択します。

  2. 「インポート」ダイアログで「EJBデプロイメント・ディスクリプタ・ファイル(ejb-jar.xml)」を選択します。

  3. 「インポート」ウィザードの手順を実行します。

    既存のモジュールに同じ名前のEJBがすでに存在している場合、競合を避けるため、そのEJBはインポートされません。

19.11 EJB/JPAコンポーネントの実行およびテスト

EJBをテストするには、EJBインスタンスを作成または検索し、そのリモート・インタフェース・メソッドをコールできるクライアント・プログラムを実行する必要があります。JDeveloperには、迅速にクライアントを作成できるサンプル・クライアント・ユーティリティが用意されています。EJBの実行およびテストには、統合サーバーまたはリモート・サーバーを使用しますが、どちらの場合にもサンプル・クライアント・ユーティリティを使用してクライアントを作成できます。

19.11.1 統合サーバーを使用したEJB/JPAコンポーネントのテスト方法

統合Oracle WebLogic ServerはJDeveloper内で動作します。このサーバーを使用すると、EJBの迅速かつ簡単な実行およびテストが可能であり、何の変更も加えずにそのEJBをデプロイできます。このサーバーを使用する場合、デプロイメント・プロファイルは不要で、初期化の必要もありません。

統合Oracle WebLogic Serverでサンプル・セッションBeanクライアントを実行する手順は次のとおりです。

  1. 「アプリケーション」ウィンドウでセッションBeanを右クリックして、「実行」を選択します。

    「メッセージ」ペインではOracle WebLogic Serverは起動しています。

  2. セッションBeanを右クリックして、ポップアップ・メニューから「サンプルJavaクライアントの作成」を選択します。

  3. デフォルトで、統合Oracle WebLogic Serverに対してクライアントを作成するオプションが選択されているので、「OK」をクリックします。

    クライアントが作成され、コード・エディタで開かれます。

    BeanがJPAエンティティに対するファサードとして機能する場合、問合せメソッドをインスタンス化するためのコードが生成されます。Beanに対してメソッドを公開した場合、生成されたクライアントには、非コメント化して呼び出すことができるメソッドが含まれます。

  4. Beanが「アプリケーション」ウィンドウから正常に起動されたら、サンプル・クライアントを右クリックして「実行」を選択します。

統合Oracle WebLogic ServerでサンプルMDBクライアントを実行する手順は次のとおりです。

統合Oracle WebLogic ServerでサンプルMDBクライアントを正常に実行するには、まず、対応するJMSキュー・リソースをWebLogic Serverドメインに作成する必要があります。

  1. 『Oracle WebLogic Server JMSリソースの管理』にあるJMSのキューおよびトピックの宛先構成に関する項の指示に従ってください。

  2. JMSモジュール・リソースを作成する場合は、次のガイドラインを使用してください。

    1. 新規のキュー・リソース(たとえば、"DefaultQueue")を使用して、新規のテストJMSモジュール(たとえば、"TestJmsModule")を作成します。

    2. 生成したMDBのマップされた名前(たとえば、"weblogic.wsee.DefaultQueue")に一致するJNDI名を使用します。

    3. デフォルトのサブデプロイメント・リソース(たとえば、"DefaultQueue")を追加し、それを、ドメインのDefaultServerインスタンスに関連付けられているJMSサーバーのターゲットとします。

  3. 「統合Oracle WebLogic Serverでサンプル・セッションBeanを実行する手順」に示した手順を実行します。ただし、「アプリケーション」ウィンドウで、MDBを選択してサンプル・クライアントを作成および実行します。

19.11.2 リモート・サーバーを使用したEJB/JPAコンポーネントのテスト方法

リモート・サーバー上でEJBをテストするには、EJBをデプロイしてからサンプル・クライアントを作成する必要があります。最初にデプロイを行うと、デプロイされたアプリケーションがフレームワークによって取得され、それがクライアントの選択リストに移入されます。


警告:

同じモジュールで異なるEJBバージョンを組み合せることはできません。


リモート・サーバーを使用してサンプル・クライアントを実行するには、次のようにします。

  1. 必要に応じて、実行しているアプリケーション・サーバーに対する接続を作成します。詳細は、「ターゲット・アプリケーション・サーバーへの接続の作成方法」を参照してください。

  2. プロジェクトレベルのEJB JARデプロイメント・プロファイルを作成します。

    1. 「アプリケーション」ウィンドウで、プロジェクトのノードを右クリックし、「デプロイ」→「新規デプロイメント・プロファイル」を選択します。

    2. 「デプロイメント・プロファイルの作成」ダイアログで、EJB JARファイルのプロファイル・タイプを選択し、そのプロファイルの名前を入力します。「OK」をクリックすると、「EJB JARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。デフォルトを受け入れて「OK」をクリックします。

  3. アプリケーションレベルのEARタイプのデプロイメント・プロファイルを作成します。

    1. 「アプリケーション」→「デプロイ」→「新規デプロイメント・プロファイル」の順に選択します。

    2. 「デプロイメント・プロファイルの作成」ダイアログで、EARファイルのプロファイル・タイプを選択し、そのプロファイルの名前を入力します。「OK」をクリックすると、「EARデプロイメント・プロファイルのプロパティの編集」ダイアログが表示されます。

  4. 新しいEJB JARプロファイルをEARプロファイル・ファイルに追加します。

    1. 「EARデプロイメント・プロファイルのプロパティの編集」ダイアログのナビゲーション・ペインで、「アプリケーション・アセンブリ」を選択します。

    2. 「Java EEモジュール」ツリーを展開し、手順2で作成したEJB JARプロファイルを選択して「OK」をクリックします。

  5. アプリケーション・サーバー接続にアプリケーションをデプロイします。「アプリケーション」→「「application-deployment-profileのデプロイ」の順に選択します。

  6. 「デプロイ」ダイアログ・ボックスで「アプリケーション・サーバーへのデプロイ」を選択し、「次へ」をクリックします。

  7. 「サーバーの選択」ページでアプリケーション・サーバー接続を選択し、「終了」をクリックします。「デプロイメント」ログ・ウィンドウで詳細を追跡できます。

  8. 「アプリケーション」ウィンドウでEJBを右クリックして、「新規のサンプルJavaクライアント」を選択します。

  9. ダイアログ・ボックスで、「アプリケーション・サーバー接続」に接続するように選択します。リストされているデプロイ済Java EEアプリケーションのいずれかを選択し、「OK」をクリックします。

  10. 「アプリケーション」ウィンドウで新規クライアントを右クリックして、「実行」を選択します。

    「メッセージ」ペインに実行の出力が表示されます。

19.11.3 JUnitを使用したEJBユニットのテスト方法

JDeveloperでは、EJBに対するJUnit回帰テストがサポートされています。JUnitは、JDeveloperのオプション機能として用意されているオープン・ソースのJava回帰テスト用のフレームワークです。この機能を使用するには、JUnit拡張機能をインストールする必要があります。

JUnitを使用して、コードを検証するテストを記述および実行します。JUnit拡張機能をインストールした後、シンプル・ウィザードを使用してセッションBeanまたはJavaクラス・ファイルを選択し、これらのファイル内でテストするメソッドを選択し、JUnitテストを開始できます。

EJBに対してJUnitテストを実行するには、次のようにします。

  1. JDeveloperの「ヘルプ」メニューからJUnit拡張機能をインストールします。詳細は、第13.4.1項「JUnitのインストール方法」を参照してください。

  2. 「アプリケーション」ウィンドウでEJBセッションBeanまたは通常のJavaクラス(POJO)を右クリックして(または、ウィザードの中から移動することもできます)、「新規」→「ギャラリから」を選択します。

  3. 「新規ギャラリ」から「ビジネス層」および「EJB」を開き、「EJB JUnit TestCase」を選択して、「OK」をクリックします。

  4. JUnitウィザードを起動します。

  5. ウィザードのステップを完了します。