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() (「 カスタムラッパーの計画の更新 」を参照) などの有用なメソッドがあります。