![[z/OS]](../images/ngzos.gif)
Java Management Extensions 動的プロキシーの概念
Java™ Management Extensions (JMX) 動的プロキシーは、MBean 要求をマルチプロセス・サーバー間で調整します。 このセクションでは、JMX 動的プロキシーに関連する主な用語について説明します。
- 制御プロセス
- アプリケーション・サーバーが要求を処理できるように、 要求を受け取り、それをサーバント・プロセスに配布します。
- サーバント・プロセス
- 制御プロセスから作業を受け取り、その作業を実行します。
- ユニコール・オプションとマルチコール・オプションの関係
- 要求が単数または複数の任意のサーバント・プロセスを呼び出す場合は、
proxyInvocationType メソッドでユニコール・オプションを使用してください。
要求が複数のサーバント・プロセスにアクセスし、
サーバント・プロセスがそれぞれ異なる結果を戻す場合は、
proxyInvocationType メソッドでマルチコール・オプションを使用します。
以下の例では、単一プロセス・モデル用に開発され (変更前)、 マルチプロセス・モデル用に変更された (変更後) MBean 記述子を示します。
前
後<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE MBean SYSTEM "MbeanDescriptor.dtd"> <MBean type="SampleStateMBean" version="6.0" description="Sample State MBean for the documentation example."> <attribute description="The name of the MBean." getMethod="getMBeanName" name="mbeanName" type="java.lang.String"/> <attribute description="The state of the MBean."name="state" getMethod="getState" setMethod="setState" type="java.lang.String"/> <operation description="Initialize the State MBean." impact="ACTION" name="initializeState" role="operation" targetObjectType="objectReference" type="void"> <signature> <parameter description="The name of the MBean." name="mbeanName" type="java.lang.String"/> <parameter description="The initial state of the MBean." name="mbeanName" type="java.lang.String"/> </signature> </operation> </MBean>
プラットフォーム属性に dynamicproxy を指定して、 ユーザー MBean を 動的プロキシー・モードで実行してください。 MBean 記述子上にプラットフォーム属性が存在していない場合は、WebSphere® Application Server for z/OS® 上にデプロイされたユーザー MBean が、自動的に動的プロキシー・モードを使用します。<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE MBean SYSTEM "MbeanDescriptor.dtd"> <MBean type="SampleStateMBean" version="6.0" platform="dynamicproxy" description="Sample State MBean for the documentation example."> <attribute description="The name of the MBean." getMethod="getMBeanName" name="mbeanName" type="java.lang.String"/> <attribute description="The state of the MBean."name="state" getMethod="getState" setMethod="setState" type="java.lang.String"/> proxyInvokeType="unicall" proxySetterInvokeType="multicall"/> <operation description="Initialize the State MBean." impact="ACTION" name="initializeState" role="operation" targetObjectType="objectReference" type="void" proxyInvokeType="multicall"> <signature> <parameter description="The name of the MBean." name="mbeanName" type="java.lang.String"/> <parameter description="The initial state of the MBean." name="mbeanName" type="java.lang.String"/> </signature> </operation> </MBean>
「変更後」例に示されているように、 属性 XML タグまたは操作 XML タグを更新して、 マルチプロセス環境でユニコール動作またはマルチコール動作を指定します。 proxyInvokeType オプションまたは proxySetterInvokeType オプションが存在していない場合は、 動作はデフォルトで次の値のいずれかに設定されます。proxyInvokeType=unicall (for the getMethod) proxyInvokeType=multicall (for the setMethod)
「変更後」例では、getMBeanName メソッドおよび getState メソッドは、 ユニコール動作で実行しています。 setState メソッドおよび initializeState メソッドは、 マルチコール動作で実行しています。
- 単一プロセス・モデル
- 単一処理アプリケーション・サーバーは、 1 つのサーバー・ランタイムを保有しています。 通常、MBean は Enterprise JavaBeans (EJB) コンテナー、Web コンテナー、Java 2 Platform Enterprise Edition (J2EE) 接続マネージャーなどの、主要なランタイム・コンポーネントの 1 つのインスタンス上で動作します。 このモデルでは、サーバー上の個々の MBean の呼び出しを、 同一のプロセスおよび同一の Java 仮想マシン (JVM) 上で実行することを想定しています。
- マルチプロセス・モデル
- マルチプロセス・モデルでは、単一サーバー・インスタンスは、
個別のオペレーティング・プロセスで実行する Java 仮想マシン (JVM) を統合したものと見なされます。
制御プロセスは、通信エンドポイント、許可、リソース・リカバリー、
ワークロード管理などのサーバー機能の働きをします。
他のすべての JVM は、アプリケーション要求を実行するワーカー JVM です。
これらの JVM は、指示を制御プロセスから受け取り、
制御プロセスとのみ対話します。
すべてのインバウンドおよびアウトバウンドの要求は、 制御プロセスを通して実行されます。 クライアント要求は、制御プロセスに到達します。 制御プロセスは、MVS™ ワークロード・マネージャー (WLM) からの支援を受けて、作業をサーバント・プロセスにディスパッチします。
サーバント・プロセスの数は、WLM によって管理され、 要求に基づいて変動します。 要求は、インストール・システム固有のパフォーマンス目標と比較して測定され、 WLM ポリシーとして表されます。 個々のサーバント・プロセスはまったく同じであり、 必要なアプリケーション・サーバー・コンポーネントをホスティングして、 J2EE アプリケーション・プログラミング・モデルを使用可能にします。サーバント・プロセスは、通信、セキュリティー、トランザクション制御など、 多くのサービスに対する制御プロセスに依存します。
マルチプロセス・モデルは、 単一プロセス・モデルより多くの追加要求を Java Management Extension (JMX) インフラストラクチャーに課します。 マルチプロセス・サーバーに対する管理要求は、 多くの場合、アプリケーション・サーバーを含むプロセス間の調整を必要とします。 JMX インフラストラクチャーには、この調整を可能にする追加の機能が組み込まれています。
- 動的プロキシー MBean の状態オブジェクト・サポート
- com.ibm.websphere.management.dynamicproxy.StateObject クラス: MBean プロバイダーは、StateObject 抽象クラスを拡張します。 StateObject クラスのサブクラスを指定して、 動的プロキシー MBean がそのサブクラスの初期化を完了する前に、 JMX ランタイムがそれをインスタンス化できるようにします。 JMX ランタイムは、StateObject クラスを動的プロキシー呼び出しハンドラー・インターフェースに接続して、 MBean メソッドの実行前および実行後に動的プロキシーの現行状態を追跡します。 JMX ランタイムも、StateObject クラスを結果集約インターフェース・クラスのほか、 イベント・ハンドラー・インターフェース・クラスにも接続して、 該当する集約アプリケーションをサポートします。
- 結果集約ハンドラー・サポート・インターフェース
- com.ibm.websphere.management.dynamicproxy.AggregationHandler クラス: 結果集約ハンドラー・サポート・インターフェースは、 MBean プロバイダーが動的プロキシー対応 WebSphere Application Server for z/OS MBean における結果集約を処理するために使用するメソッドを定義します。 aggregationHandlerClass 属性を MBeanDescriptor MBean XML タグ上に指定します。 マルチコール proxyInvokeType オプションを使用する MBean メソッド、 および値を戻す MBean メソッドにこのインターフェースを実装します。 このインターフェースは、集約が処理されるメソッドを判別します。 続いて、サーバント・プロセスが制御プロセスに戻すすべてのサーバント MBean 結果を適切に集約してから、 単一結果をコンパイルして呼び出し元に戻します。
- イベント集約ハンドラー・サポート・インターフェース
- com.ibm.websphere.management.dynamicproxy.EventHandler インターフェース・クラス: イベント集約ハンドラー・サポート・インターフェースは、 MBean プロバイダーが動的プロキシー対応 WebSphere Application Server for z/OS MBean におけるイベント集約を処理するために使用するメソッドを定義します。 eventHandlerClass 属性を MBeanDescriptor MBean XML タグ上に指定します。 このインターフェースは、すべての着信サーバント MBean イベントを処理および集約して、 重複イベントを複数のサーバント MBean からフィルタリングします。 また、1 つのイベントを動的プロキシー MBean のリスナーに引き渡します。 このインターフェースは、 MBean プロバイダー要件に応じて現行の動的プロキシー MBean 状態を調整します。
- 呼び出しハンドラー・サポート・インターフェース
- com.ibm.websphere.management.dynamicproxy.InvocationHandler クラス: 呼び出しハンドラー・サポート・インターフェースは、WebSphere Application Server for z/OS 動的プロキシー MBean が、状態管理情報を必要とするときに実装する preInvoke および postInvoke メソッドを定義します。 MBean はその情報を使用して、マルチコール呼び出しタイプが必要な場合にサーバント MBean と調整します。 invocationHandlerClass 属性を MBeanDescriptor MBean XML タグ上に指定します。 状態を変更するメソッドを呼び出す前、および呼び出した後に、 状態管理を必要とする動的プロキシー MBean に対してこのインターフェースを使用します。
- ユーザー MBean
- ユーザー MBean は、サーバント・プロセス内に常駐し、
制御プロセス内で実行する、動的に作成されたプロキシー MBean を介して要求を処理します。
次のような場合、MBean プロバイダーは、独自の専門化された処理においてフックできるように、
ハンドラーをユーザー MBean と一緒にパッケージすることができます。
- 結果集約
- イベント集約
- 呼び出し処理
- オブジェクトの状態管理