9. EJBコンテナのチューニング

Standard-J EditionおよびStandard/Enterprise EditionにおけるEJBコンテナのチューニング方法に関して説明します。

 
9.1. EJB

EJBは、ステートフルセッションBean、ステートレスセッションBean、エンティティBean、メッセージドリブンBeanの4種類あり、用途に応じて使い分けられます。

 
9.1.1.ステートレスセッションBeanのチューニング

ステートレスセッションBeanは名前の通り状態(ステート)を持ちません。そのため事前にインスタンスを生成し、プールしておくことが可能です。インスタンス生成はCPUリソースを消費し、時間がかかりますので、運用中のインスタンス生成を避けるために事前生成とプーリングが行われます。

また複数クライアントから同時に呼び出しが行われることを想定して、複数のインスタンスをプールしておくことも可能です。プールするインスタンス数を増やすと、プール数に比例してメモリを消費します。

ステートレスセッションBeanのチューニングはインスタンスプールのプール数の調整によって行われます。これはEditionによって設定項目が変わります。

Standard/Enterprise Editionの場合

プールするインスタンス数はプロセスグループのスレッド数と同じ値になります。「2.4.1多重度のチューニング」を参考にスレッド数を設定してください。

配備されたアプリケーション単位でプールするインスタンス数を調整することも可能です。以下のどちらかの方法により0〜スレッド数の間で設定してください。

Standard-J Editionの場合

プールするインスタンス数はEJBコンテナの設定項目である「通常プールサイズ」で設定されます。規定値では「通常プールサイズ」は0になっています。インスタンス事前生成機能を有効にするには、「通常プールサイズ」を1以上にしてください。

 
9.1.2.ステートフルセッションBeanのチューニング

ステートフルセッションBeanは状態を持ちますので事前生成は行えません。クライアントからステートフルセッションBeanが利用される時、必ずインスタンス生成/破棄が行われます。状態が必要ないアプリケーションの場合、ステートレスセッションBeanで設計し、事前生成・プーリング機能を有効にした方が実行性能は良くなります。

ステートフルセッションBeanではプールの代わりにキャッシュが使われます。メモリ上に作られ、破棄されていないインスタンスが長時間アクセスされない場合、状態がファイルにキャッシュされます。頻繁にキャッシングが行われる場合、アプリケーションの問題(クライアントからbeanのremove()メソッドが呼ばれていない)もしくはインスタンスのタイムアウト設定時間が短すぎることが考えられます。インスタンスのタイムアウト設定時間は次のように設定します。

 
9.1.3.エンティティBeanのチューニング

エンティティBeanはプールとキャッシュ両方を利用します。プーリングについては「9.1.1.ステートレスセッションBeanのチューニング」、キャッシングについては「9.1.2.ステートフルセッションBeanのチューニング」を参照してください。

 
9.1.4.メッセージドリブンBeanのチューニング

ステートレスセッションBeanと同様に事前生成・プーリングが行われます。「9.1.1.ステートレスセッションBeanのチューニング」を参照してください。ただしStandard-J Editionでの通常プールサイズの設定はEJBコンテナではなく、独自のMDBコンテナの設定に拠ります。