さまざまな接続ファクトリー設定を調整して、 MDB 作業のための接続とセッションの作成を制御することができます。
認証パラメーターを使用してアプリケーションとサーバーを特定のキュー・マネージャーに接続するには、 アプリケーションとメッセージ・リスナー・ポートをともに接続ファクトリーにバインドします。 サーバーは、アプリケーションが JMS を活用するために使用するものと同じ管理モデルを使用して、 メッセージ駆動型 Bean に配信するために到着するメッセージを listen します。 そのメッセージ内で、 リスナー・ポートがキュー接続ファクトリーまたはトピック接続ファクトリー、および対応するキューまたはトピックにバインドされます。
接続ファクトリーのメッセージング・プロバイダー設定 (例えば、キュー・マネージャー設定) を指定するほかに、 接続およびセッション・プールのプロパティーも指定します。 特に、接続ファクトリーの場合、接続プール・プロパティーの「最大接続数」とセッション・プール・プロパティーの 「最大接続数」の値は、リスナー・ポート、アプリケーション、またはその両方に接続ファクトリーを使用するかによって異なる考慮事項に留意した上で、 選択する必要があります。
この最大接続数を決定するには、 まず単一のアプリケーション・ディスパッチ (通常は「1」) で 取得した最大数を調べてから、 この接続ファクトリーを使用する すべての接続をチェックする必要があります。 この接続の最大数に、サーバント内のワーカー・スレッドの数を掛けます。 (この値について詳しくは、次の注意事項を参照してください。)
ここでカウントされるのは、単一サーバントのワーカー・スレッドのみであることに注意してください。 これは、管理者がプロパティー値のセットを 1 つしか定義していなくても、 各サーバントが、接続とセッション・プールが設定された独自の接続ファクトリーを取得するためです。
メッセージ駆動型 Bean は、onMessage() でアプリケーション・ロジックを実行する際に、 JMS 接続を取得することもあれば、取得しないこともあります。 例えば、メッセージを別の宛先に転送したり、応答を送信したりするために接続を取得することがあります。 または、一部のログを更新するだけで、独自の JMS 関連の呼び出しを実行しない場合もあります。
いずれの場合も、これがリスナー・ポートが使用する接続であるため、 前述の 1 番目の最大接続数では、 このメッセージ駆動型 Bean に対して「1 つ」とカウントする必要があります。 メッセージ駆動型 Bean の onMessage() ロジックが 1 つの JMS 接続を取得する場合は、 サーバントのワーカー・スレッドの数を最大接続数に追加します。 そうでない場合、この (MDB) アプリケーション・コンポーネントの代わりに最大接続数に追加する必要はありません。
当然、この接続ファクトリーを使用して JMS 呼び出しを実行する他の MDB 以外のアプリケーション・コンポ ーネントが原因で、管理者が 2 番目の最大接続数全体を追加しなければならなくなることがあります。 しかし、この接続ファクトリーを使用する MDB または MDB 以外のアプリケーション・コンポーネントの数にかかわりなく、 それらがディスパッチごとにそれぞれ 1 つの JMS 接続のみを使用する場合は、 2 番目のカウントは、サーバントのワーカー・スレッドの数 (アプリケーションにサーバントのワーカー・スレッド の数を掛けたものではない) に等しくなるだけです。
この計算は、当初の予想と比べて容易です。 すべての標準的な場合の MDB リスナー・ポート処理については、 セッション・プールの「最大接続数」プロパティーは、単一サーバントのワーカー・スレッドの数に設定する必要があります。
その理由は、同じ接続ファクトリーのクライアントの場合であっても、 JMS セッションがアプリケーション・ディスパッチ間でも、 リスナー・ポート・インフラストラクチャーによっても共用されないという事実にあります。 さらに、(接続ファクトリー・レベルでプールのプロパティー設定が一度しか指定されていなくても)、 接続ファクトリーから取得した JMS 接続ごとに固有のセッション・プールがあるという事実もあります。
リスナー・ポートとアプリケーションの両方によって同じ接続ファクトリーが使用され、 アプリケーションのセッション・プール設定の最大接続数の要件の方が高くなる場合が考えられますが、 ここでは、それについては説明しません。
この計算が単純である方が望ましいと考えるユーザーもいます。 例えば、メッセージ駆動型 Bean ごとに別々の接続ファクトリーを作成する方法です (この場合、接続プールの「最大接続数」プロパティーの値は、単純に 1 に設定します)。 また、管理する接続ファクトリーの管理オブジェクトの数を少なくする方を選ぶユーザーもいます。
MDB 処理に使用する接続とセッションを共用することはできません (つまり、 複数のフローがこれらを同時に使用することはできません) つまり、使用する接続ファクトリーの数を少なくするために、 プールを利用するのではないということです。 言い換えれば、別の接続ファクトリーを追加しても、接続のプールは防ぐことはできません。追加しなくても、 MDB リスナー・ポート処理が接続のプールを活用する可能性があります。