エンタープライズ Bean の開発

通常、この製品では、2 つのエンタープライズ Bean 開発シナリオのうちのいずれかが使用されます。1 つはコマンド行で、Ant、Make、Maven または類似するツールを使用します。 2 つ目は、IDE ベースの開発とビルド環境です。 ここで説明するのは、IDE を使用しない開発手順です。

始める前に

Enterprise JavaBeans (EJB) 2.x Bean のみ: J2EE アプリケーションおよびそのアプリケーションに必要なエンタープライズ Bean を設計します。
  • コンテナー管理パーシスタンス (CMP) を備えたエンティティー Bean を開発する前に、 『並行性制御』のトピックをお読みください。
EJB 3.x Bean のみ: Java™ EE アプリケーションおよびそのアプリケーションが必要とするエンタープライズ Bean を設計します。
  • CMP を使用するエンティティー Bean を開発する前に、『並行性制御』のトピックをお読みください。 EJB 3.x モジュールはエンティティー Bean をサポートしていませんので、注意してください。 ご使用の EJB 2.x レベル・モジュールにエンティティー Bean を引き続き配置する必要があります。

このタスクについて

エンタープライズ Bean 開発用ツールを選択するには、以下に示す 2 つの基本的な方法があります。
  • 使用可能な IDE ツール (エンタープライズ Bean コードの有効部分を自動的に生成し、エンタープライズ Bean のパッケージ化およびテスト用の統合ツールを組み込んでいるもの) のいずれか 1 つを使用することができます。 推奨される IDE は、Rational® Application Developer 製品です。

    IDE プロジェクトのビルド・パスに install_root/dev/JavaEE/j2ee.jar を追加して、新規の EJB 3.x API クラスでのコンパイルの依存関係を解決します。この JAR ファイルがプロジェクト・ビルド・パスに追加されるとコード・アシストが機能します。 サーバーを定義する (「J2EE パースペクティブ」を参照) 場合、 サーバーに、この製品のインストール・ディレクトリーを指示します。Rational Application Developer で Java EE 関連プロジェクトを作成すると、そのプロジェクトによって、 プロジェクト・ビルド・パスに install_root/dev/JavaEE/j2ee.jar が自動的に追加されます。

  • IDE を使用せずにエンタープライズ Bean を開発する場合は、 少なくとも ASCII テキスト・エディターが必要です。 エンタープライズ Bean の開発をサポートしない Java 開発ツールを使用することもできます。 Java ソフトウェア開発キット (SDK) に付属のツールを使用すると、 Bean のアセンブル、テスト、およびデプロイを行うことができます。

    アセンブリー・ツールと同様に、EJB 3.x モジュールを使用するためには標準 Java EE のコマンド行ビルド環境も若干の変更が必要です。以前の Java EE アプリケーション開発パターンと同様、install_root/dev/JavaEE ディレクトリーにある j2ee.jar ファイルを、コンパイラー・クラスパスに組み込む必要があります。Ant を使用するコマンド行ビルド環境のサンプルが、install_root/samples/src/TechSamp ディレクトリーにあります。

以下のステップは、2 番目のアプローチである IDE を使用しない開発を、基本的にサポートしています。

手順

  1. 必要に応じて、すべての既存コードを、必要なバージョンの EJB 仕様へマイグレーションします。

    EJB 仕様の バージョン 1.1、2.0、および 2.1 に従って作成されたアプリケーションは、EJB 3.x コンテナーで変更せずに実行できます。 『サポートされている仕様へのエンタープライズ Bean コードのマイグレーション』のトピックを参照してください。

  2. エンタープライズ Bean のコンポーネントを作成し、コンパイルします。
    • EJB 3.x の仕様に従って開発されたセッション Bean には、最低限、Bean クラスが必要です。
    • EJB 1.1 セッション Bean には、最低限、Bean クラス、ホーム・インターフェース、 およびリモート・インターフェースが必要です。 EJB 1.1 エンティティー Bean には、 Bean クラス、1 次キー・クラス、ホーム・インターフェース、 およびリモート・インターフェースが必要です。
    • EJB 2.x セッション Bean には、最低限、Bean クラス、ホームまたはローカル・ホーム・インターフェース、 およびリモートまたはローカル・インターフェースが必要です。EJB 2.x エンティティー Bean には、 Bean クラス、1 次キー・クラス、リモート・ホームまたはローカル・ホーム・インターフェース、 およびリモートまたはローカル・インターフェースが必要です。インターフェースのタイプは、 合わせる必要があります。例えば、ローカル・インターフェースを実装する場合は、ローカル・ホーム・インターフェースも定義する必要があります。
      重要: 1 次キー・クラスは unknown にすることができます。 詳しくは、『不明な 1 次キー・クラス』のトピックを参照してください。
    • メッセージ駆動型 Bean では、Bean クラスだけが必要です。
  3. それぞれのエンティティー Bean ごとに、パーシスタンス操作を処理する作業を実行します。

    EJB 3.x モジュールでは、Java Persistence API (JPA) 仕様を使用して Plain Old Java Object (POJO) パーシスタント・エンティティーを開発することを検討してください。詳しくは、『Java Persistence API』トピックを参照してください。エンティティー Bean を以前の EJB 仕様で開発することを選択した場合は、以下の手順を実行してください。

    • エンティティー Bean のパーシスタント・データ用のデータベース・スキーマを作成します。
      • CMP を使用するエンティティー Bean の場合は、サポートされているデータベースのいずれかに、その Bean のパーシスタント・データを格納する必要があります。 アセンブリー・ツールでは、 CMP エンティティー Bean 用のデータベース表を作成するための SQL コードが自動的に生成されます。 複雑なデータベース・マッピングを必要とする CMP Bean の場合は、Rational Application Developer を使用して データベース表のためのコードを生成することをお勧めします。 アセンブリー・ツールの使用方法について詳しくは、アセンブリー・ツールのインフォメーション・センターを参照してください。
      • Bean 管理パーシスタンス (BMP) を持つエンティティー Bean の場合は、 データベース・ツールを使用してデータベースとデータベース表を作成することも、 既存のデータベースとデータベース表を使用することもできます。

      データベースとデータベース表の作成について詳しくは、ご使用のデータベースの資料を参照してください。

    • (EJB 2.x に対応する CMP エンティティー Bean のみ)

      EJB 照会言語 (EJB QL) を使用して、ファインダー照会を定義します。

      EJB QL を使用して、以下のように、 CMP フィールドとコンテナー管理の関係によってファインダーを定義します。
      • パブリック ・ファインダーは、Bean のホーム・インターフェースでは可視です。 このファインダーは、Bean クラスで実装され、 リモート・インターフェースとコレクション・タイプのみを戻します。
      • プライベート・ファインダーは、SELECT ステートメントとして表され、 Bean クラス内部でのみ使用されます。 このファインダーは、ローカルとリモート両方のインターフェース、従属値、 その他の CMP フィールド・タイプ、およびコレクション・タイプを戻すことができます。
    • (EJB 1.1 に対応する CMP エンティティー Bean のみ: IBM® 拡張) 特殊なファインダー・メソッド (findByPrimaryKey メソッド以外) を含む CMP エンティティー Bean ごとに、 ファインダー・ヘルパー・インターフェースを作成します。
      findByPrimaryKey メソッド以外の論理が、CMP を持つエンティティー Bean のホーム・インターフェースに含まれる各ファインダー・メソッドに必要です。
      • 論理は共通インターフェース NameBeanFinderHelper に定義する必要があります。 ここで、Name は、例えば AccountBeanFinderHelper などの、エンタープライズ Bean の名前です。
      • 論理はストリング定数 findMethodNameWhereClause に含まれている必要があります。 ここで、findMethodName はファインダー・メソッドの名前です。ストリング定数はゼロ個以上の疑問符 (?) を含むこともができます。この疑問符は、そのメソッドが呼び出されたときに、ファインダー・メソッドの引数の値に左から右の順で置換されます。

例: 読み取り専用のエンティティー Bean の使用

次の使用のシナリオと使用例では、読み取り専用のエンティティー Bean を使用する Enterprise JavaBeans (EJB) アプリケーションを作成する方法について説明します。

使用のシナリオ

カスタマーは、価格設定および配送 率情報のカタログのデータベースを持っていて、それは毎日遅くても現地時 間の午後 10 時 00 分 (24 時間制では 22 時 00 分) に更新されます。 このデータに対して読み取り専用アクセス権を持つ EJB アプリケーションの書き込みが行われます。 つまり、このアプリケーションは決して価格設定データベースを更新しません。 更新は何か他のアプリケーションを介して行われます。

カスタマーのエンティティー Bean ローカル・イ ンターフェースは以下のようになります。

	public interface ItemCatalogData extends EJBLocalObject {
	 
	  	  public int getItemPrice();
	 
	  	  public int getShippingCost(int destinationCode);
	 
}

この EntityBean を起動して配送を含む合計コストを計算するステートレス SessionBean メソッド (TxRequired であることが前提) 内のコードは、以下のようになります。

.....
		// Some transactional steps occur prior to this point, such as removing the item from 
  // inventory, etc.
  // Now obtain the price of this item and start to calculate the total cost to the purchaser
 
  ItemCatalogData theItemData = 
	    	    (ItemCatalogData) ItemCatalogDataHome.findByPrimaryKey(theCatalogNumber);
 
		int totalcost = theItemData.getItemPrice();
	 
		// ...     some other processing, etc. in the interim
	// ...
	// ...
	 
		// Add the shipping costs
		totalcost = totalcost + theItemData.getShippingCost(theDestinationPostalCode);
アプリケーション・アセンブル時間で、カスタマーはこの Bean のための EJB キャッシング・パラメーターを以下のように設定します。
  • ActivateAt = ONCE
  • LoadAt = DAILY
  • ReloadInterval = 2200
    非推奨の機能 (Deprecated feature) 非推奨の機能 (Deprecated feature): WAR ファイル拡張 (WEB-INF/ibm-web-ext.xmi) およびアプリケーション拡張 (META-INF/ibm-application-ext.xmi) の両方を含む IBM デプロイメント記述子拡張の reloadInterval 属性および reloadingEnabled 属性は、非推奨になりました。depfeat

毎晩 22 時 00 分以降の最初の getItemPrice() メソッド の呼び出しで、EJB コンテナーはデータベースから価格設定情報を再ロードします。 getItemPrice() および getShippingCost() への呼び出しの間に時計が 22 時 00 分となった場合、このトランザクション内の最初のメソッド起動は 22 時 00 分より前に発生したため、getShippingCost() メソッドは、データベースに対し 22 時 00 分に発生した可能性のあるあらゆる変更よりも前に持っていた値を戻しま す。 従って、使用された品目価格と配送コストはお互いに同期のままで残ります。

次のタスク

1 つ以上の EJB モジュールに Bean をアセンブルします。EJB 3.x Bean を使用している場合は、『EJB モジュールのアセンブル』または『EJB 3.x モジュールのアセンブル』のトピックを参照してください。


トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tejb_dvdp
ファイル名:tejb_dvdp.html