一連の手順の実行対象を変更する手順。 retarget 手順は入れ子にすることができます。
名前 |
型 |
必須 |
構成可能 |
説明 |
host |
文字列 |
はい |
可能 |
包含された手順の実行対象となるホスト |
名前 |
数 |
説明 |
varList |
0 または 1 |
包含された手順で使用できる局所変数。 これらは、新しいホストのスコープ内で評価される |
steps |
0 またはそれ以上 |
新しいホスト上で実行する手順。 <retarget> 手順を含むブロックのスコープ内で許可される任意の手順を指定できる |
host 属性は、各種のコンポーネントターゲッター要素内のほか、<retarget> 手順内でも使用できます。 この属性の値はホストの名前であり、置換変数参照を含むことができます。 また、シンボリック名「/」を含めて現在の実行対象のルート物理ホストを参照することも、あるいは「..(/..)*」を含めて現在の実行対象の親ホストを参照することもできます。 サポートされている全構文は、第 16 章の「ホストの切り替え」に示されています。
host 属性をコンポーネントターゲッター内に指定することは、包含する手順を retarget 手順内に含めることに意味的に同じです。
<retarget> 手順が検出される場合、まず呼び出し側の現在のホストのコンテキストで「host」属性を評価します。
「host」属性の値が現在のホストの名前と異なる場合、以下の手順が実行されます。
ホスト名を実際のホストに解決処理します。 そのようなホストが存在しない場合、エラーが発生します。
現在のユーザーがそのホストにおいて「プランの実行」アクセス権を所有しているかを検証します。 所有していない場合、エラーが発生します。
このホストのルート物理ホストに RA が含まれていること、ルート物理ホストに接続可能なこと、およびルート物理ホストが最新の状態で準備が整っていることを確認します。 この条件が満たされない場合、エラーが発生します。
以前にアクセスしたすべてのホストでロックを保持したまま、このホストでロックを取得します。 現在の実行スレッドがすでにホストをロックしている場合、この処理は事実上ノーオペレーション (空命令) となります。 ホストがすでにほかの実行スレッドによってロックされている場合、この処理はホストのロックが解除されるまでブロックします。 ロック要求のためにデッドロックが起きた場合は、エラーが発生します。
そのホストが新しい「現」ホストになります。 「物理」ホストは、新しい「現」ホストに基づいて再設定されます。 「初期」ホストは変化しません。
上記の手順が完了したところで、<varList> 要素の変数が新しい現ホストのコンテキストで評価されます。 局所変数は、包含するスコープの変数を隠蔽することができます 続いて、各手順が新しい現ホストのコンテキストで実行されます。
最後に、対象変更の処理によって現ホストが変わった場合には、そのロックが適宜解除され、その現ホストが呼び出し側の現ホストとして再設定されます。 現在の実行スレッドでホストが以前にロックされている場合は、ロックを初めに取得したブロックが完了するまでロックしたままとなります。
空の <retarget> ブロックは、現在のユーザーが適切なアクセス権を持っているかということと、ホストの準備が適切に行われているかということをあらかじめ検証するメカニズムとして依然として有用です。
以下に、WebLogic 管理対象サーバー上で使用できる「再起動」制御サービスの例を示します。 このサービスは、管理サーバー上で制御を呼び出して管理対象サーバーを「停止」し、続いてローカルマシンで呼び出しを行なってサーバーを起動することによって実施されます。
「adminHostName」変数は、呼び出し側の現ホスト (これは管理対象サーバーを含んでいる vhost と見なされる) で評価されます。 domainName 変数は、新しい対象ホスト (これは管理サーバーを含んでいる vhost と見なされる) で評価されます。 ADMIN_SERVER コンポーネントも、新しい対象ホストで解決処理されます。
<control name="restart"> <varList> <var name="adminHostName" default=":[target:adminHostName]"/> </varList> <retarget host=":[adminHostName]"> <varList> <var name="domainName" default=":[target:domainName]"/> </varList> <call blockName="stopServer"> <argList serverName=":[serverName]" domainName=":[domainName]"/> <installedComponent name="ADMIN_SERVER"/> </call> </retarget> <call blockName="start"/> </control> |