サンプル 5a : ダイナミック オブジェクト リリース

サンプル 5a は、競売の実例を基にして、エンティティ オブジェクトのダイナミック リリースと全体のリソース管理を示します。普通の競売と同じように、このサンプルにも商品に対して入札を行う入札者が登場します。

商品は常に最良の入札と関連付けられます。最低 4 つの入札があった後は、商品は最良 (最高) の入札価格で売却できるようになります。入札者は最良の取引、つまり最安値で購入した商品の推移を見ます。しかし、商品選択や金額はランダムに生成されるため、すべての入札者が商品の購入に成功するという保証はありません。

サンプルを開始すると、サーバにより 10,000 人の入札者と 10,000 個の商品が作成されます。META-INF/ejb-jar.xml ファイル内の次の env-entry 要素を変更することにより入札者数と製品数を簡単にカスタマイズできます。

<env-entry>
  <env-entry-name>ejipt.env_entries</env-entry-name>
  <env-entry-type>java.lang.String</env-entry-type>
  <env-entry-value>numProducts,numBidders</env-entry-value>
</env-entry>

クライアントは、商品に対してランダム入札の生成を開始します。入札のバッチが生成されると、それらのバッチはサーバに送信されて処理されます。

バッチ内の入札は管理者によって処理されます。管理者はバッチごとにバッチ内の各入札を関連商品に適用して、全商品の中から十分な入札数 (4 つ以上) があり売却可能な商品を判別します。入札数が 4 つ以上ある商品は売却されます。

このロジックを実行するコードを表示するには、次のファイルをテキスト エディタで開きます。

サンプルを開始します。また、deploy.properties ファイルで必要なホスト情報を変更します。次のコマンドを入力します。JRun のルート ディレクトリおよびホスト名の部分は環境に合わせて置き換えてください。JRun のルート ディレクトリは、JRun インストール ディレクトリに置き換えてください。

bash$ export JRUN_HOME=JRun のルート ディレクトリ
bash$ cd JRun のルート ディレクトリ/samples/sample5a

次のコマンドを実行して Bean を公開し、サーバを起動します。

bash$ make jars 
bash$ make deploy
bash$ make standalone

次に、別のコマンド プロンプト ウィンドウでクライアントを起動します。

bash$ make go host=ホスト名 size=1000

パラメータ size=1000 は、バッチ サイズ、つまり 1 つのバッチで処理する入札数を示します。このパラメータにより、特定の競売に関してバッチを処理する頻度を変更できます。

10,000 の入札者と 10,000 の商品が関係したサンプルを実行すると、サーバが処理する入札の数は約 50,000、処理するエンティティ オブジェクトの合計数は約 70,000 になります。すべての商品が売却されると、管理者はすべての入札者を閲覧して、最良の入札の時刻を判別します。最良の入札がない場合は、購入がない入札者のカウントが 1 つ増分されます。

参照解除された EJB オブジェクト (Bid) は、この実行中、継続的にガーベッジ コレクションに入れられます。アクティブとして残っている Bid は、購入済みの商品に関して入札者から参照されている Bid であると見なされます。サンプルのレポート作成段階では、これらのアクティブな Bid の再ロードを省けるため、必要な ejbLoads() の数を最小にすることができます。

サンプルでは持続性を持たせるためのデータベースを使用していません。CMP または BMP のいずれかを使用して持続性を持たせるのは簡単なことです。Bid はかなり頻繁に生成されるため、Bid テーブルのインデックスを設定しないことをお勧めします。このような制限があるため、ejbLoads() を最小に保つことがより重要となります。

サンプルは、クライアントを再起動するようには設計されていません。サンプルを再実行する場合は、サーバを再起動して、クリーンな環境を整える必要があります。