ASF モードでのメッセージの処理方法
ASF モードでは、サーバーのセッションおよびスレッドは、メッセージ駆動型 Bean (MDB) に適したメッセージが検出された場合の処理のみに割り振られます。 MDB が同時に処理できるスレッドの数は、リスナー・ポートの「最大セッション数」プロパティーの値によって決まります。
WebSphere® Application Server バージョン 7 以降では、リスナー・ポートは安定化されています。詳しくは、安定化されたフィーチャーに関する項目を参照してください。リスナー・ポートを使用する WebSphere MQ メッセージ駆動型 Bean のデプロイメント構成を、アクティベーション・スペックを使用する構成に移行する準備を行う必要があります。非 ASF モードのアクティベーション・スペックの構成方法について詳しくは 『非 ASF モードのアクティベーション・スペックの構成』を参照してください。 ただし、アプリケーションを WebSphere Application Server バージョン 7 より前のアプリケーション・サーバーで実行する必要がないと確認するまでは、このマイグレーションを開始しないでください。例えば、1 つのアプリケーション・サーバー・クラスターにバージョン 6.1 のメンバーとそれより新しいバージョンのメンバーがある場合は、クラスター内のすべてのアプリケーション・サーバーをその新しいバージョンにマイグレーションするまでは、そのクラスター上のアプリケーションを、アクティベーション・スペックを使用するようにマイグレーションしないでください。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)

- リスナー・ポートが開始されると、このポートは IBM MQ キュー・マネージャーへの接続を開いて、内部キュー・エージェントを作成します。
- キュー・エージェントが、メッセージがないか、JMS 宛先を listen します。
- キュー・エージェントがメッセージを検出します。
- キュー・エージェントは、メッセージがリスナー・ポートを使用している MDB に適しているかどうかを検査します。
- メッセージが MDB に適している場合、リスナー・ポートは、メッセージ・リスナー・サービス・スレッド・プールからスレッドを割り振り、さらにアプリケーション・サーバーのサーバー・セッション・プールからサーバー・セッションを割り振ります。 リスナー・ポートが開始してから初めてサーバー・セッションが使用された場合、リスナー・ポートは JMS プロバイダーへの接続を開きます。 割り振られたサーバー・セッションは、割り振られたスレッド上で稼働します。
- キュー・エージェントがメッセージの ID をサーバー・セッションに渡します。 次に、メッセージの listen を再度開始します。
- サーバー・セッションがメッセージ ID を使用して宛先からメッセージを取得します。
- サーバー・セッションが MDB の onMessage() メソッドを呼び出してメッセージを処理します。
- メッセージが処理されると、サーバー・セッションは終了し、アプリケーション・サーバー・セッション・プールに戻ります。 サーバー・セッションが JMS プロバイダーに対して開いた接続は、次回の使用でサーバー・セッションがその接続を再確立する必要がないように、開いたままの状態になります。
- スレッドが終了し、メッセージ・リスナー・サービス・スレッド・プールに戻ります。
MDB が同時に処理できるスレッドの数は、リスナー・ポートの「最大セッション数」プロパティーの値によって決まります。「最大セッション数」をデフォルト値の 1 に設定した場合は、MDB は一度に 1 つのメッセージのみを処理できます。したがって、最初のメッセージの処理が完了する前にキュー・エージェントが 2 番目のメッセージを検出すると、最初のメッセージの処理が完了してサーバー・セッションが使用可能になるまで、キュー・エージェントは 2 番目のメッセージをブロックします。
- キュー・エージェントが最初のメッセージを検出し、最初の例のようにスレッドとサーバー・セッションを割り振ります。 メッセージは、MDB の onMessage() メソッドを使用して処理されます。
- 最初のメッセージの処理中に、キュー・エージェントがメッセージの listen を再度開始します。
- キュー・エージェントが 2 番目のメッセージを検出し、2 番目のスレッドと 2 番目のサーバー・セッションを割り振ります。 メッセージは、MDB の onMessage() メソッドを使用して処理されます。
- 最初のメッセージが処理されると、最初のサーバー・セッションは終了し、サーバー・セッション・プールに戻ります。 最初のスレッドは終了し、スレッド・プールに戻ります。
- 2 番目のメッセージが処理されると、2 番目のサーバー・セッションは終了し、サーバー・セッション・プールに戻ります。 2 番目のスレッドは終了し、スレッド・プールに戻ります。
![[z/OS]](../images/ngzos.gif)
以下の図に、メッセージ・リスナー・サービスが ASF モードで動作している場合に、WebSphere Application Server と IBM MQ の間でメッセージングがどのように行われるかを示します。

- リスナー・ポートが開始されると、このポートは IBM MQ キュー・マネージャーへの接続を開いて、内部キュー・エージェントを作成します。
- キュー・エージェントが、メッセージがないか、JMS 宛先を listen します。
- キュー・エージェントがメッセージを検出し、このメッセージがリスナー・ポートを使用している MDB に適しているかどうかを検査します。
- メッセージが MDB に適している場合、キュー・エージェントはメッセージ ID を作業レコードに渡します。 次に、作業レコードがワークロード管理 (WLM) キューに送られます。
- キュー・エージェントがメッセージの listen を再度開始します。
- WLM キューがサーバント領域内の ASF ディスパッチャーを開始して作業レコードを処理します。
- ASF ディスパッチャーがサーバー・セッション・プールからサーバー・セッションを割り振ります。
- サーバー・セッションが作業レコードのメッセージ ID を使用して、宛先からメッセージを取得します。
- サーバー・セッションが MDB の onMessage() メソッドを呼び出してメッセージを処理します。
- メッセージが処理されると、サーバー・セッションは終了し、アプリケーション・サーバー・セッション・プールに戻ります。 サーバー・セッションが JMS プロバイダーに対して開いた接続は、次回の使用でサーバー・セッションがその接続を再確立する必要がないように、開いたままの状態になります。
- スレッドが終了し、メッセージ・リスナー・サービス・スレッド・プールに戻ります。
MDB が同時に処理できるスレッドの数は、リスナー・ポートの「最大セッション数」プロパティーの値によって決まります。「最大セッション数」をデフォルト値の 1 に設定した場合は、MDB は一度に 1 つのメッセージのみを処理できます。したがって、最初のメッセージの処理が完了する前にキュー・エージェントが 2 番目のメッセージを検出すると、最初のメッセージの処理が完了してサーバー・セッションが使用可能になるまで、キュー・エージェントは 2 番目のメッセージをブロックします。
- キュー・エージェントが最初のメッセージを検出し、最初の例のように作業レコードをセットアップします。
- 作業レコードが WLM キューに送られ、ASF ディスパッチャーがサーバント領域内にセットアップされます。
- ASF ディスパッチャーがサーバー・セッションを割り振り、メッセージが MDB の onMessage() メソッドを使用して処理されます。
- 最初のメッセージの処理中に、キュー・エージェントがメッセージの listen を再度開始します。
- キュー・エージェントが 2 番目のメッセージを検出し、2 番目のスレッドと 2 番目のサーバー・セッションを割り振ります。 メッセージは、MDB の onMessage() メソッドを使用して処理されます。
- 最初のメッセージが処理されると、最初のサーバー・セッションは終了し、サーバー・セッション・プールに戻ります。 最初のスレッドは終了し、スレッド・プールに戻ります。
- 2 番目のメッセージが処理されると、2 番目のサーバー・セッションは終了し、サーバー・セッション・プールに戻ります。 2 番目のスレッドは終了し、スレッド・プールに戻ります。