13.2.2 トリガーとは何か
トリガーとは本来,指定されたインスタンスの使用の可否をユーザに判定させるコールバック機能です。トリガーはAgentのポーリングの非同期な代替手段で,通常はオブジェクトとのコネクションが絶たれたあとの回復に使用されます。問い合わせはさまざまな方法で行われますが,トリガーは特殊な用途です。
(1) トリガーメソッドの考察
Agentクラスのトリガーメソッドについて表13-5および表13-6に示します。
どちらのAgentトリガーメソッドも,失敗の理由を示すFail例外を発生させることができます。
TriggerHandlerインタフェースは,表13-7および表13-8で説明するメソッドで構成されます。
(2) トリガーの生成
TriggerHandlerはコールバックオブジェクトです。TriggerHandlerをインプリメントするには,TriggerHandlerPOAクラスから派生させ,そのimpl_is_ready()メソッドとimpl_is_down()メソッドをインプリメントします。ロケーションサービスにトリガーを登録するには,Agentインタフェースのreg_trigger()メソッドを使用します。このメソッドには,監視したいインスタンスを記述し,インスタンスの可用性が変化した場合に呼び出したいTriggerHandlerオブジェクトを指定する必要があります。インスタンス記述(TriggerDesc)には,リポジトリID,インスタンス名,ホスト名などのインスタンス情報の組み合わせを入れることができます。提供するインスタンス情報が詳細であればあるほど,インスタンスの仕様も特定化できます。
- IDLサンプル13-2 TriggerDescのIDL
struct TriggerDesc { string repository_id; string instance_name; string host_name; };
- 注
-
TriggerDescのフィールドに空の文字列("")を設定すると,このフィールドは無視されます。各フィールドのデフォルト値は空の文字列です。
例えば,リポジトリIDしか持たないTriggerDescは,そのインタフェースのどのインスタンスにも一致します。図13-3の例に戻ると,IDL:Automobile/Car:1.0のどのインスタンスのトリガーも,Tom's Car on Athena,Tom's Car on Zeus,Kerri's Carというインスタンスのうちの一つが使用可能または使用不能になるとして発生します。ただし,TriggerDescに「Tom's Car」というインスタンス名を追加すると,二つの「Tom's Car」というインスタンスのどちらかの可用性が変化する場合だけトリガーが発生するように指定を厳しくします。最後にAthenaというホスト名を追加すると,AthenaサーバのTom's Carインスタンスが使用可能または使用不能になる場合に限りトリガーが発生するように,トリガーをさらに改善できます。