レスポンスとエラー処理¶
Snowflake Native SDK for Connectors は、特に UI から使用されるように公開および設計されたプロシージャに対して、特定の標準応答を使用します。さらに、例外が有効な応答にマッピングされ、 EVENT TABLE
に記録されるようにする方法も提供します。
応答¶
SDK プロシージャは、高レベルのものも内部的なものも、情報を渡すために特定の構造の variant
を使用します。このような variant
の要件は、 response_code
フィールドが含まれている必要があります。また、場合によっては、応答コードが必須の message
フィールドの OK
と異なることがあります。追加のフィールドを含めることもできますが、さらにカスタム処理が必要になります。THe 応答形式は次のとおりです。
{
"response_code": "<response code>",
"message": "<message>"
}
プロシージャとオブジェクトのデフォルト実装を置き換える場合は、この形式を使用することをお勧めします。
エラー処理¶
Snowflake Native SDK for Connectors は、実行時に発生する可能性のある例外を処理するための便利なデフォルトメカニズムを提供します。これを担当するクラスは ConnectorErrorHelper
と呼ばれ、デフォルトの実装は DefaultConnectorErrorHelper
です。この機能は、カスタマイズ可能な2つのコールバックを提供します。最初の ExceptionMapper
は、すべての予期せぬエラーを ConnectorException
形式にラッピングする役割を担っています。この機能は、主に応答が上記の形式に準拠していることを確認するために使用されます。
2番目のコールバックである ExceptionLogger
は、エラーがログに記録されるようにします。これは、すべての標準ログエントリがSnowflakeによって EVENT TABLE
に保存されるため、アプリケーションの問題を解決するときに役立つため重要です。
ヘルパーを使用する方法¶
ヘルパーは、次の2つのメソッドを公開しています。
withExceptionWrapping(Supplier<ConnectorResponse> action)
withExceptionLogging(Supplier<T> action)
これらの方法はそれぞれ上記の mapper
と logger
を使用します。これらのアプローチを組み合わせたヘルパーメソッドのデフォルト実装もあります。
default ConnectorResponse withExceptionLoggingAndWrapping(Supplier<ConnectorResponse> action) {
return withExceptionWrapping(() -> withExceptionLogging(action));
}
handler
からメソッドを呼び出すときは、このラッピングを可能な限り高いレベルで使用することをお勧めします。たとえば ConnectionConfigurationHandler では次のように使われます。
public static Variant setConnectionConfiguration(Session session, Variant configuration) {
var handler = ConnectionConfigurationHandler.builder(session).build();
return handler.setConnectionConfiguration(configuration).toVariant();
}
public ConnectorResponse setConnectionConfiguration(Variant configuration) {
return errorHelper.withExceptionLoggingAndWrapping(
() -> setConnectionConfigurationBody(configuration)
);
}
SDK は、この動作をカスタマイズするための ConnectorErrorHelperBuilder
と呼ばれるビルダーも公開します。このビルダーによって、開発者は mapper
および logger
のコールバックの動作をカスタマイズできます。カスタマイズが完了すると、新しい helper
をそれぞれの builders
の handler
クラスに渡すことができます。例:
class CustomUnknownExceptionMapper implements ExceptionMapper<Exception> {
@Override
public ConnectorException map(Exception exception) {
return new CustomConnectorException(exception);
}
}
class CustomHandler {
// Path to this method needs to be specified in the PUBLIC.SET_CONNECTION_CONFIGURATION procedure using SQL
public static Variant configureConnection(Session session, Variant configuration) {
//Using builder
var errorHelper = new ConnectorErrorHelperBuilder()
.withConnectorExceptionLogger(new CustomUnknownExceptionMapper())
.build();
var handler = ConnectionConfigurationHandler.builder(session)
.withErrorHelper(errorHelper)
.build();
return handler.connectionConfiguration(configuration).toVariant();
}
}