Java で ScalarDL アプリケーションを書く
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このドキュメントでは、ScalarDL アプリケーションの作成方法について説明します。ScalarDL をアプリケーションに統合し、エラーを処理し、データを検証する方法を学習します。
ScalarDL Client SDK を使用する
ScalarDL を操作するには、2つのオプションがあります。ScalarDL Ledger をはじめように示されているコマンドを使用するか、Java Client SDK を使用するかです。
コマンドを使用すると、アプリケーションを作成する必要がないため便利です。ただし、コマンドは実行ごとにプロセスを呼び出すため、処理が遅くなります。そのため、コマンドは主にコントラクトをすばやくテストするために使用されます。代わりに、ScalarDL ベースのアプリケーションを作成する場合は、より効率的な Java Client SDK を使用することをお勧めします。
Java Client SDK は、Maven Central で入手できます。Gradle などのビルドツールを使用して、アプリケーションにインストールできます。たとえば、Gradle では、build.gradle
に次の依存関係を追加し、VERSION
を使用する ScalarDL のバージョンに置き換えます。
dependencies {
implementation group: 'com.scalar-labs', name: 'scalardl-java-client-sdk', version: '<VERSION>'
}
Java Client SDK の API は、ClientService というサービスクラスによって提供されます。以下は、ClientService
を使用してコントラクトを実行する方法を示したコードスニペットです。
// ClientServiceFactory should always be reused.
ClientServiceFactory factory = new ClientServiceFactory();
// ClientServiceFactory creates a new ClientService object in every create method call
// but reuses the internal objects and connections as much as possible for better performance and resource usage.
ClientService service = factory.create(new ClientConfig(new File(properties));
try {
// create an application-specific argument that matches your contract
JsonNode jsonArgument = ...;
ContractExecutionResult result = service.executeContract(contractId, jsonArgument);
result.getContractResult().ifPresent(System.out::println);
} catch (ClientException e) {
System.err.println(e.getStatusCode());
System.err.println(e.getMessage());
}
factory.close();
ClientService
オブジェクトを作成するには、常に ClientServiceFactory
を使用する必要があります。ClientServiceFactory
は、ClientService
の作成に必要なオブジェクトをキャッシュし、指定された設定に基づいてそれらを再利用するため、ClientServiceFactory
オブジェクトは常に再利用する必要があります。
ClientService
は、Ledger や Auditor などの ScalarDL コンポーネントと対話して、証明書の登録、コントラクトの登録、コントラクトの実行、データの検証を行うスレッドセーフなクライアントです。コントラクトを実行するときは、コントラクトの対応する引数タイプを指定する必要があります。たとえば、コントラクトが JacksonBasedContract
を拡張する場合、コントラクトを実行するときに JsonNode
引数を渡す必要があります。
詳細については、Javadoc を参照してください。
エラーの処理
アプリケーションでエラーが発生した場合、Client SDK はステータスコードを含む例外とエラーコードを含むエラーメッセージを返します。エラーの原因を特定するには、ステータ スコードとエラーコードを確認する必要があります。
エラー処理を実装する
Client SDK は、エラーが発生すると ClientException をスローします。次のように例外をキャッチすることで、エラーを処理できます。
ClientService clientService = ...;
try {
// interact with ScalarDL through a ClientService object
} catch (ClientException) {
// e.getStatusCode() returns the status of the error
}
ステータスコード
ステータスコードは、どのようなステータスリクエストが最終的に発生したかを説明します。ScalarDL のステータスコードは、HTTP ステータスコードに似た5つのクラスに分類されます。
- 成功ステータス (200-299)
- ステータスコードの 2xx クラスは、リクエストが成功したことを示します。
- 検証エラー (300-399)
- ステータスコードの 3xx クラスは、データベース内のアセットレコードが無効な状態にあり、改ざんされている可能性があることを示します。
- ユーザーエラー (400-499)
- ステータスコードの 4xx クラスは、署名または鍵ペアが無効である、コントラクト内で実行エラーが発生する、コントラクトが見つからないなどの、クライアントエラーと認識される問題が原因で、サーバーがリクエストを処理できないか、処理しないことを示します。
- サーバーエラー (500-599)
- ステータスコードの 5xx クラスは、Ledger 側または Auditor 側のいずれかのサーバーで予期しない状況が発生し、リクエストを処理できなかったことを示します。
- クライアントエラー (600-699)
- ステータスコードの 6xx クラスは、クライアントで予期しない状況が発生し、リクエストを処理できなかったことを示します。
詳細については、StatusCode を参照してください。