AbstractCustomWrapper の拡張¶
新しいカスタムラッパーを作成する最も簡単な方法は、抽象クラス com.denodo.vdb.engine.customwrapper.AbstractCustomWrapper の以下の 2 つのメソッドを実装することです。
public CustomWrapperSchemaParameter[] getSchemaParameters(Map<String, String> inputValues)このメソッドは、そのカスタムラッパーの出力スキーマを返す必要があります。これは、ラッパーに対してクエリを実行することによって取得されるデータのスキーマです。出力スキーマが入力パラメータの値に依存するカスタムラッパーを開発できます。そのためには、ラッパーの入力パラメータを定義する
getInputParametersメソッド (「 AbstractCustomWrapper のオーバーライド 」を参照) を実装します。それにより、入力パラメータの値がinputValuesパラメータに格納されます。出力スキーマはCustomWrapperSchemaParametersオブジェクトの配列として表され、これらのオブジェクトがスキーマのフィールドを表します。CustomWrapperSchemaParameterは、名前、型、およびその他のいくつかのプロパティ (必須かどうか、NULL 可能性など) を持ちます。また、表されるフィールドが複合フィールドの場合は、他のCustomWrapperSchemaParametersの配列をオプションで持ちます。CustomWrapperSchemaParameterで、ラッパーが返すフィールドの「ソース型プロパティ」を指定することもできます。管理ガイドの「 ソース型プロパティ 」では、なぜこれらのプロパティを定義するとクエリのパフォーマンスにメリットがあるのかを説明しています。public void run( CustomWrapperConditionHolder condition, List<CustomWrapperFieldExpression> projectedFields, CustomWrapperResult result, Map<String, String> inputValues)ユーザーがこのラッパーに対してクエリを実行すると、Virtual DataPort はこのメソッドを呼び出します。ラッパーの構成によっては (「 カスタムラッパーの構成 」を参照)、
condition引数とprojectedFields引数が考慮されます (条件については、「 条件の処理 」で説明します)。これら 2 つのパラメータにより、クエリの条件と投影フィールドのリストがカプセル化されてラッパーに渡されます。inputValuesには、ラッパーの入力パラメータが格納されます。これには値のテキスト表現のみが格納され、値の型に関する情報は格納されません。getInputParameterValue(String name)メソッドは、パラメータの値とその型に関する完全な情報を提供するCustomWrapperInputParameterValueのインスタンスを返します。通常、runメソッドの実装では、渡された条件、投影フィールド、および入力値を分析し、ラッパーのデータソースに対してクエリを実行し、取得したデータを Virtual DataPort に返す処理が行われます。これは、Objectsの配列を受け取る、result引数のaddRowメソッドを呼び出すことによって実行されます。addRowに渡される配列には、runメソッドで指定された投影フィールドのリストと一致する一連のObjectsが格納されていなければなりません。また、これらのオブジェクトの型はgetSchemaParametersメソッドで定義されたスキーマと一致していなければなりません。「CustomWrapperSchemaParameter」に適した Java クラスをその型に従って確認するには、 CustomWrapperSchemaParameter クラスの
getParameterClass()メソッドの Javadoc を参照してください。カスタムラッパーの現在の実行のスキーマを取得するには、「run()」メソッドのパラメータとして渡される CustomWrapperResult オブジェクトの
getSchema()メソッドを呼び出します。これは、カスタムラッパーの
getSchemaParameters()メソッドが返すスキーマです。出力 (つまり、getSchemaParameters()メソッドが返すもの) がラッパーの入力パラメータに応じて変わるカスタムラッパーでは、このメソッドを呼び出すと役立つことがあります。
これら 2 つのメソッドを実装することによってカスタムラッパーを作成できますが、一部のシナリオでは、 AbstractCustomWrapper クラスのいくつかのメソッドをオーバーライドして、より高度な機能にアクセスできるようにする必要がある場合があります。これらのメソッドとそれぞれのデフォルトの動作については、次のセクションで示します。
この他にも、 AbstractCustomWrapper には、情報をサーバーのログファイルに記録する log(int level, String logMessage) や、実行計画にアクセスしてトレースに情報を追加する getCustomWrapperPlan() (「 カスタムラッパーの計画の更新 」を参照) などの有用なメソッドがあります。
