例: 読み取り専用のエンティティー 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 分に発生した可能性のあるあらゆる変更よりも前に持っていた値を戻しま す。 従って、使用された品目価格と配送コストはお互いに同期のままで残ります。