TDV Data Source Toolkitガイド > データソース拡張アダプターを準備する方法 > 拡張アダプターの記述方法 > メタデータ取得のカスタマイズ(イントロスペクション)
 
メタデータ取得のカスタマイズ(イントロスペクション)
アダプターに必要な次のタスクは、データソースをイントロスペクトしてメタデータを取得することです。データソースで利用可能なメタデータに応じてbooleanプロパティを設定します(アダプターイントロスペクションのプロパティ)。
イントロスペクションが完了すると、TDVは公開されたメタデータをクエリーできます。
デフォルトの実装では、JDBC DatabaseMetadataを使用してメタデータを取得します。それが十分でない場合、またはうまく機能しない場合は、別の実装を指定できます。
リレーショナルアダプターの場合、イントロスペクターの標準インターフェイスはRelationalMetaDataです。RelationalMetaDataはDatabaseMetadataを拡張します。カスタム実装では、AbstractRelationalMetadataを拡張して、すべてのDatabaseMetadataメソッドを実装する負荷を軽減できます。
ResultSetToMetadataConverterを使用すると、メタデータ結果セットをツールキットイントロスペクションAPIで使用可能な形式に変換できます。
IntrospectionFilterインターフェイスを使用すると、不要なメタデータ項目を除外できます。
注意: アダプターが、メタデータの列に標準でない名前を使用するデータソースから精度、スケール、および長さを確実に取得できるようにすることが重要です。「精度、スケール、長さの決定」を参照してください。
精度、スケール、長さの決定
アダプターは、アダプターの[構成]タブで設定されたネイティブからTDVへのデータタイプマッピングを使用して、イントロスペクション時に検出された列タイプから汎用TDVデータタイプにマップする方法を決定します。
テーブルをイントロスペクトすると、テーブル列のデータ型に、正しくない精度、スケール、長さなどの予期しない属性値が含まれていることが判明する場合があります。これが発生した場合、アダプターはデータベースメタデータの誤ったフィールドを使用して、これらの属性値に関する情報を取得している可能性があります。
たとえば、デフォルトの実装では、次の方法でメタデータから精度を取得します。
resultSet.getInt("COLUMN_SIZE")
 
これは多くのデータソースで機能しますが、お使いのデータソースでは機能しない可能性もあります。たとえば、カスタムデータソースでは、精度がCOLUMN_SIZEではなくNUMERIC_PRETDVIONというフィールドで返される場合があります。この場合は、結果セットから精度をrs.getInt(“NUMERIC_PRETDVION”)として取得する必要があります。
これは、次のいずれかの方法で解決できます。
最初のオプション
[Adapter(アダプター)]構成の[Introspection(イントロスペクション)]のプロパティで、精度、スケール、または修正対象の属性に使用されるフィールドを指定しているプロパティを見つけます。たとえば、精度の場合、プロパティは次のとおりです。
java.sql.DatabaseMetaData.getColumns()の列サイズの列名
プロパティの値を変更して、データソースの適切なフィールド名を使用できます。また、データソースUIの[Overrides(オーバーライド)]タブを使用すると、個々のデータソースインスタンスのこの動作をオーバーライドできます。
プロパティを変更して別のフィールド名を指定する場合は、メタデータの結果セットに実際にそのフィールドが含まれていることを確認してください。そうでない場合は、2番目のオプションを使用し、結果セットのメタデータから精度、スケール、長さを取得する代わりに、精度、スケール、長さを取得するSQLクエリーを記述します。たとえば、システムテーブルのこのフィールドに精度、スケール、および長さが含まれているものの、フィールドがメタデータの一部として返されないことがわかっている場合があります。
2番目のオプション
アダプターの拡張実装では、AbstractRelationalMetaDataクラスを拡張してgetColumns()メソッドをオーバーライドし、そこに精度、スケール、長さ、またはデータタイプ名自体を含むその他のデータタイプの詳細を検索および設定するカスタムロジックを配置できます。
これは、他の条件に応じて異なる方法でタイプの詳細を設定できるようにする場合に推奨されるオプションです。
3番目のオプション
データベースメタデータから提供されるデータに関係なく、特定のネイティブタイプを常に特定の固定精度/スケール/長さにマッピングする場合は、アダプター構成の[Data Type Mapping(データタイプマッピング)]を使用できます。
たとえば、ネイティブタイプMONEYをTDVタイプDECIMAL(19, 2)にマッピングできます。ただし、ネイティブからTDVへのタイプマッピングでタイプの後に書かれている括弧内の数字をTDVが受け入れるようにするには、アダプター構成に移動して、このIntrospectionプロパティをTrueに設定する必要があります。
タイプマッピングのデータタイプの詳細により、結果セットの実装が上書きされます。
また、データソースUIの[Overrides(オーバーライド)]タブを使用すると、個々のデータソースインスタンスのこの動作をオーバーライドできます。