exteNd Workbench 4.1
コアヘルプ

 

    First Previous Next Last 開発ガイド  05/16/03 09:21:28 

第6章    Enterprise JavaBeansの作成

EJB (Enterprise JavaBeans)は、J2EEアプリケーションアーキテクチャの重要な部分です。この章では、EJBについて紹介し、次のトピックが含まれています。

 
Top of page

EJBについて

EJBは、トランザクションおよび安全である再使用可能なJavaベースのコンポーネントであり、リモートからアクセスできます。EJBコンポーネントを使用すると、アプリケーションにビジネス論理を提供したり、アプリケーションのユーザインタフェースをバックエンド情報システムにリンクしたり、JMSメッセージを処理したりできます。

Sunでは、次のEJBタイプが定義されています

EJBタイプ

説明

エンティティBean

リレーショナルデータベースまたはオブジェクトデータベースのような基盤となるデータストアのデータを表します。1つまたは複数の関連テーブル間、またはノンリレーショナルデータストアのコンポーネント間の複雑な関係を表す場合もあります。

エンティティBeanでは、基盤となるデータストアのデータが表されるため、エンティティインスタンスに含まれるデータは、エンティティBeanによって表される行のデータに同期化されている必要があります。同期化のプロセスは、「持続性」と呼ばれます。持続性には、データ行の作成、削除、および変更が含まれます。エンティティBeanインスタンスを作成すると、基盤となるデータストアに1つの行が作成され、エンティティBeanインスタンスを削除すると、基盤となるデータストアからその行が削除されます。

EJBでは、2つの持続性モデルをサポートしています。

  • BMP (Bean-managed persistence) — 基盤となるデータストアにデータを同期化するコードを記述します。

  • CMP (Container-managed persistence) — コンテナによってデータが同期化される方法を説明したプロパティを配備記述子に設定します。最も一般的なCMPモデルは、EJB1.1指定およびEJB2.0指定に説明されています。EJB1.0 CMPモデルは存在しますが、現在はあまりサポートされていません。

セッションBean

ビジネスプロセスを表します。また、その他のエンティティやセッションBeanの間の関係を管理するために使用することもできます。たとえば、セッションBeanは、クライアントショッピングカートアプリケーションとして使用したり、企業データへのアクセスまたは企業データの操作を行うために使用したりできます。セッションBeanは一時的なものであるため、持続性データを表しません。

セッションBeanには、次の2種類があります。

  • ステートフル —「ステートフル」セッションBeanは、作成元であるクライアントセッションにバインドされるため、そのクライアントセッションに関連付けられている値を維持するために使用できます。

  • ステートレス —「ステートレス」セッションBeanは、各メソッド呼び出しが完了した後でインスタンスプールに解放されるため、その後に続くメソッド呼び出しでクライアントが同じインスタンスを持つことは保証されません。

メッセージ駆動型Bean (2.0のみ)

セッションBeanのように、ビジネスプロセスを表します。EJBコンテナに存在し、非同期メッセージを受信またはリッスンします。メッセージが受信されると、メッセージ駆動型Beanはそのメッセージを処理し、次のメッセージを待機します。メッセージ駆動型Beanは、セッションBeanと同じタイプのアプリケーションに対して使用できますが、クライアントによってメソッドを呼び出すことはできません。つまり、JMSメッセージに対してのみ応答できます。

メッセージ駆動型Beanは、JMSを通じてアクセスされます。

EJBをJ2EEアプリケーションでどのように使用できるかは、次の図のとおりです。

devEJBArch20

EJBコンテナの利点   この図から、EJBは「EJBコンテナ」内のJ2EEサーバ上で実行されることが分かります。EJBコンテナでは、(EJB指定によって定義されているように)、ネーミングサービス、リモートアクセス、セキュリティ、およびトランザクションサポートのような低レベルのサービスを含むEJBランタイム環境を提供します。

EJBコンテナには、次の2つの利点があります。

クライアントからEJBへのアクセス方法   この図から、EJBクライアントではEJBに直接アクセスしないことも分かります。エンティティBeanとセッションBeanは、EJBObjectおよびEJBHomeオブジェクトを通じてアクセスされます。 EJBObjectは、EJBのビジネスメソッドへのアクセスを提供し、EJBHomeオブジェクトは、EJBのライフサイクルメソッドへのアクセスを提供します。EJB2.0の新機能では、リモートインタフェースの代わりにローカルインタフェースを使用して、同じコンテナ内のBeanが相互にアクセスすることを許可しています。このため、リモート呼び出しのオーバーヘッドを防ぐことができます(新しい2つのローカルインタフェースは、EJBLocalHomeおよびEJBLocalObjectです)。メッセージ駆動型Beanは、どのインタフェースを通じてもアクセスされません。クライアントプログラムはJMSメッセージサーバを通じてのみアクセスされるため、クライアントプログラムではメッセージ駆動型Beanに直接アクセスできません。

 
Top of page

EJBの開発

開発するコンポーネントは、EJB指定のバージョンおよび開発するEnterprise Beanのタイプによって異なります。各指定に対して何が必要とされるかは、次の表のとおりです。

EJBバージョン

Beanタイプ

指定する必要のあるインタフェースまたはクラス

EJB1.1

エンティティBeanまたはセッションBean

  • ホームインタフェースおよびリモートインタフェース

  • Bean実装クラス

  • (オプション)プライマリキークラス(エンティティBeanのみ)

EJB2.0

エンティティBeanまたはセッションBean

  • LocalHomeおよびローカルコンポーネントインタフェース、またはRemoteHomeおよびリモートインタフェース、あるいはこれらすべて

  • Bean実装クラス

  • (オプション)プライマリキークラス(エンティティBeanのみ)

  • (オプション)従属オブジェクト(エンティティBeanに対してのみ)

メッセージ駆動型Bean

  • Bean実装クラス

開発するEJBをテストまたは配備するには、次の操作を行う必要があります。

  1. 1つのEJB JARファイルにBeanおよびインタフェースをパッケージ化し、 配備記述子を含めます(配備記述子の詳細については、 EJBのパッケージ化を参照してください)。

  2. (オプション) Beanを(1つまたは複数のEJB JARから) 1つのアプリケーションにアセンブルします。

  3. J2EE互換サーバにEJB JARを配備します ( EJBの配備を参照)。

サンプルセッションBeanの参照

このサンプルでは、ステートフルセッションBeanのコンポーネントが示されており、次の内容が含まれています。

リモートインタフェース   このサンプルについての注記は、次のとおりです。

ホームインタフェース   このサンプルについての注記は、次のとおりです。

Bean実装クラス   Bean実装クラスについての注記は、次のとおりです。

 
Top of section

Workbenchの機能

Workbenchには、作成するEJBに関する情報の入力を求めるEJBウィザードが装備されています。入力を求められる情報は、次のとおりです。

すべての情報が提供されると、ウィザードによって次のものが構成されます。

ウィザードによって構成されるもの

詳細

リモートコンポーネントインタフェースまたはローカルコンポーネントインタフェース、あるいはその両方

実装クラスのパブリックメソッドをすべて含みます。

コードを記述する必要はありません。

RemoteHomeまたはLocalHome、あるいはその両方

指定により必要なライフサイクルメソッド、および実装クラスで定義されているその他のcreate()メソッドを含みます。

コードを記述する必要はありません。

Bean実装クラス

指定した全メソッドに対して必要なすべてのインポート、メンバー変数、およびメソッドスケルトンを含みます。

結果として生じるJavaファイルには実装されていないコメントも含まれるため、クラスをスキャンして完了しているものと完了していないものを簡単に検索できます。

プライマリキークラス

個別のプライマリキークラスは、Beanフィールドがプライマリキーとして使用するには十分でない場合にのみ生成されます。

 
Top of page

EJBのパッケージ化

EJBのコンポーネントを開発したら、それらのコンポーネントを1つのEJB JARにパッケージ化します。これを行うには、次の操作を実行します。

  1. EJB JARの配備記述子を作成します。

  2. EJB JARファイル(拡張子が.JARのJAR)を作成し、EJBソースファイル、およびEJBに必要な他のユーティリティクラスを追加します。

 
Top of section

配備記述子の作成

配備記述子」は、EJB JARファイルのコンテンツをXMLで記述したものです。このファイルには任意の有効なファイル名を付けて、任意のディレクトリに保存できます。ただし、EJB JARファイルでは、ejb-jar.xmlという名前を付けて、META-INFというディレクトリに保存する必要があります。ejb-jar.xmlファイルは、Sun Enterprise JavaBeans DTDによって指定されている形式に従う必要があります。DTDの詳細については、オンラインリファレンス J2EE配備記述子を参照してください。

EJB配備記述子には、次の内容が含まれます。

内容

定義者

説明

JARにある個々のBeanの説明

Bean開発者

EJBのJavaクラスファイルの名前や、ホームインタフェースおよびリモートインタフェースの名前など、EJB JARの個々のBeanに関する情報

JARのBeanのランタイム属性

アプリケーションアセンブラ

役割、メソッド許可、およびトランザクション属性に名前を付けるエントリなど、EJB JARのBeanのランタイム属性に関する情報

配備者は、この組み合わせの情報を使用して、EJB JARをターゲットサーバにインストールし、この情報をランタイム環境の実際のエンティティにマップします。

 
Top of section

Workbenchの機能

EJBプロジェクト」の一部としてEJBを作成すると、Workbenchによって EJB配備記述子DTDに準拠した配備記述子が自動的に作成されます。EJBプロジェクトにコンポーネントを追加すると、Workbenchでは、プロジェクトおよび配備記述子の同期化を維持するために配備記述子を更新します。

ejb-jar.xmlファイルを変更および更新するには、Workbench「配備記述子エディタ」を使用します。 配備記述子エディタを使用すると、EJB配備記述子を作成することもできます。

 
Top of section

EJB JARファイルの作成

EJBは、EJB JARファイルにパッケージ化される必要があります。EJB JARファイルの作成には、任意のアーカイブツールを使用できます。

 
Top of section

Workbenchの機能

Workbenchは、アーカイブプロセスを自動化します。EJBをコンパイルおよびアーカイブするには、Workbenchで[Projects]>[Build and Archive]の順に選択します。

 
Top of page

EJBの配備

ユーザに対してEJBを使用可能にするには、Novell exteNd Application ServerなどのJ2EEサーバにEJB JARを配備します。これを行うには、次の操作を実行します。

  1. アプリケーションおよびサーバに固有なランタイム配備情報を指定します。

    各J2EEサーバには、ランタイム配備情報を指定するための独自の要件があります。たとえば、Novell exteNd Application Serverでは配備計画を使用し、Sun RI (Reference Implementation)ではランタイム配備記述子を使用します。

  2. EJB JARを配備します。

Workbenchの場合   EJB JARを配備する

  1. J2EEサーバが実行中でアクセス可能であることを確認します。

  2. Project]>[Deploy Archive]の順に選択します。

  3. [Deployment]ダイアログボックスに情報を入力します。

    配備情報は、配備する先のサーバによって異なります。選択したサーバに基づいて適切な配備ツールを実行するためにWorkbenchで使用できるJ2EEサーバプロファイルを作成するには、サーバプロファイルダイアログボックスを使用します。

  4. OK]をクリックして、EJB JARを配備します。

    Workbenchにより、複数のJ2EEサーバへの自動配備が行われます。

    For more information    詳細については、『ツールガイド』の アーカイブ配備に関する章を参照してください。

 
Top of page

EJBアプリケーションを設計するためのヒント

優れたEJBアプリケーションを設計するには、優れたデータベースアプリケーションを設計する場合の標準的な手法に従うことに加えて、次のようなEJB固有の手法を使用する必要があります。

EJBの手法

詳細

適切なウェイトのコンポーネントを使用する

  • ビジネス論理レベルでメソッドを定義します。

  • 可能な限りEJBの組み込みトランザクションサポートを活用します。

トランザクションを簡潔にする

  • トランザクションはリモートクライアント(フォームなど)から開始しないでください。クライアントがクラッシュした場合、データベースは、トランザクションがタイムアウトになるまでロックされたままの状態になります。

  • トランザクションはサーブレットまたはページから開始できますが、ブラウザに応答する前にサーブレットまたはページでトランザクションを閉じる必要があります。ユーザが操作を行っている間は、トランザクションを開いたままにしないでください。

  • トランザクションを管理するためにセッションBeanの使用を考慮します。

ユーザインタフェースと統合する

可能であれば、ページまたはサーブレットからEJBを直接呼び出します。EJBは、リモートJavaクライアントに直接公開しないでください。

Bean検索または参照でjavax.rmi.PortableRemoteObject.narrow()メソッドを常に使用する

キャストは、RemoteHomeおよびリモートコンポーネントインタフェースに対して十分ではありません。

エンティティBeanプライマリキークラスに対してequals()メソッドおよびhashCode()メソッドを常に実装する

これらのメソッドでは、(オブジェクトの)デフォルトの実装が正しい署名で上書きされる必要があります。

不要になったセッションBeanでremove()メソッドを呼び出す

remove()メソッドでは、Beanインスタンスを削除し、対応するリモートオブジェクトをアンエクスポートします。

    First Previous Next Last 開発ガイド  05/16/03 09:21:28 

Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC, a wholly owned subsidiary of Novell, Inc. All rights reserved.