エンタープライズ Bean の開発
通常、この製品では、2 つのエンタープライズ Bean 開発シナリオのうちのいずれかが使用されます。1 つはコマンド行で、Ant、Make、Maven または類似するツールを使用します。 2 つ目は、IDE ベースの開発とビルド環境です。 ここで説明するのは、IDE を使用しない開発手順です。
始める前に
- コンテナー管理パーシスタンス (CMP) を備えたエンティティー Bean を開発する前に、 『並行性制御』のトピックをお読みください。
- CMP を使用するエンティティー Bean を開発する前に、『並行性制御』のトピックをお読みください。 EJB 3.x モジュールはエンティティー Bean をサポートしていませんので、注意してください。 ご使用の EJB 2.x レベル・モジュールにエンティティー Bean を引き続き配置する必要があります。
このタスクについて
- 使用可能な 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 を使用しない開発を、基本的にサポートしています。
手順
例: 読み取り専用のエンティティー 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): 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 モジュールのアセンブル』のトピックを参照してください。