ステップ 2: 台帳への接続をテストする - Amazon Quantum Ledger Database (Amazon QLDB)

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 2: 台帳への接続をテストする

このステップでは、トランザクションデータ API エンドポイントを使用して Amazon QLDB の vehicle-registration 台帳に接続できることを確認します。

台帳への接続をテストするには
  1. 以下のプログラム (ConnectToLedger.java) を確認します。このプログラムは、vehicle-registration 台帳へのデータセッション接続を作成します。

    2.x
    /* * Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import java.net.URI; import java.net.URISyntaxException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; import software.amazon.awssdk.services.qldbsession.QldbSessionClient; import software.amazon.awssdk.services.qldbsession.QldbSessionClientBuilder; import software.amazon.qldb.QldbDriver; import software.amazon.qldb.RetryPolicy; /** * Connect to a session for a given ledger using default settings. * <p> * This code expects that you have AWS credentials setup per: * http://docs.aws.amazon.com/java-sdk/latest/developer-guide/setup-credentials.html */ public final class ConnectToLedger { public static final Logger log = LoggerFactory.getLogger(ConnectToLedger.class); public static AwsCredentialsProvider credentialsProvider; public static String endpoint = null; public static String ledgerName = Constants.LEDGER_NAME; public static String region = null; public static QldbDriver driver; private ConnectToLedger() { } /** * Create a pooled driver for creating sessions. * * @param retryAttempts How many times the transaction will be retried in * case of a retryable issue happens like Optimistic Concurrency Control exception, * server side failures or network issues. * @return The pooled driver for creating sessions. */ public static QldbDriver createQldbDriver(int retryAttempts) { QldbSessionClientBuilder builder = getAmazonQldbSessionClientBuilder(); return QldbDriver.builder() .ledger(ledgerName) .transactionRetryPolicy(RetryPolicy .builder() .maxRetries(retryAttempts) .build()) .sessionClientBuilder(builder) .build(); } /** * Create a pooled driver for creating sessions. * * @return The pooled driver for creating sessions. */ public static QldbDriver createQldbDriver() { QldbSessionClientBuilder builder = getAmazonQldbSessionClientBuilder(); return QldbDriver.builder() .ledger(ledgerName) .transactionRetryPolicy(RetryPolicy.builder() .maxRetries(Constants.RETRY_LIMIT).build()) .sessionClientBuilder(builder) .build(); } /** * Creates a QldbSession builder that is passed to the QldbDriver to connect to the Ledger. * * @return An instance of the AmazonQLDBSessionClientBuilder */ public static QldbSessionClientBuilder getAmazonQldbSessionClientBuilder() { QldbSessionClientBuilder builder = QldbSessionClient.builder(); if (null != endpoint && null != region) { try { builder.endpointOverride(new URI(endpoint)); } catch (URISyntaxException e) { throw new IllegalArgumentException(e); } } if (null != credentialsProvider) { builder.credentialsProvider(credentialsProvider); } return builder; } /** * Create a pooled driver for creating sessions. * * @return The pooled driver for creating sessions. */ public static QldbDriver getDriver() { if (driver == null) { driver = createQldbDriver(); } return driver; } public static void main(final String... args) { Iterable<String> tables = ConnectToLedger.getDriver().getTableNames(); log.info("Existing tables in the ledger:"); for (String table : tables) { log.info("- {} ", table); } } }
    注記
    • 台帳に対してデータオペレーションを実行するには、QldbDriver クラスのインスタンスを作成して、特定の台帳に接続する必要があります。これは、前のステップで台帳の作成に使用した AmazonQLDB クライアントとは異なるクライアントオブジェクトです。前のクライアントは、「Amazon QLDB API リファレンス」に示されている管理 API オペレーションの実行にのみ使用されます。

    • まず、QldbDriver オブジェクトを作成します。このドライバーを作成するときに台帳名を指定する必要があります。

      次に、このドライバーの execute メソッドを使用して、PartiQL ステートメントを実行できます。

    • オプションで、トランザクション例外の最大再試行回数を指定できます。execute メソッドは、オプティミスティック同時実行制御 (OCC、optimistic concurrency control) の競合やその他の一般的な一時例外を、この設定可能な制限に達するまで自動的に再試行します。デフォルト値は、「4」です。

      この制限に達した後もトランザクションが成功しない場合、ドライバーが例外をスローします。詳細については、「Amazon QLDB でドライバーが使用する再試行ポリシーを理解する」を参照してください。

    1.x
    /* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package software.amazon.qldb.tutorial; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.client.builder.AwsClientBuilder; import com.amazonaws.services.qldbsession.AmazonQLDBSessionClientBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.qldb.PooledQldbDriver; import software.amazon.qldb.QldbDriver; import software.amazon.qldb.QldbSession; import software.amazon.qldb.exceptions.QldbClientException; /** * Connect to a session for a given ledger using default settings. * <p> * This code expects that you have AWS credentials setup per: * http://docs.aws.amazon.com/java-sdk/latest/developer-guide/setup-credentials.html */ public final class ConnectToLedger { public static final Logger log = LoggerFactory.getLogger(ConnectToLedger.class); public static AWSCredentialsProvider credentialsProvider; public static String endpoint = null; public static String ledgerName = Constants.LEDGER_NAME; public static String region = null; private static PooledQldbDriver driver; private ConnectToLedger() { } /** * Create a pooled driver for creating sessions. * * @return The pooled driver for creating sessions. */ public static PooledQldbDriver createQldbDriver() { AmazonQLDBSessionClientBuilder builder = AmazonQLDBSessionClientBuilder.standard(); if (null != endpoint && null != region) { builder.setEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, region)); } if (null != credentialsProvider) { builder.setCredentials(credentialsProvider); } return PooledQldbDriver.builder() .withLedger(ledgerName) .withRetryLimit(Constants.RETRY_LIMIT) .withSessionClientBuilder(builder) .build(); } /** * Create a pooled driver for creating sessions. * * @return The pooled driver for creating sessions. */ public static PooledQldbDriver getDriver() { if (driver == null) { driver = createQldbDriver(); } return driver; } /** * Connect to a ledger through a {@link QldbDriver}. * * @return {@link QldbSession}. */ public static QldbSession createQldbSession() { return getDriver().getSession(); } public static void main(final String... args) { try (QldbSession qldbSession = createQldbSession()) { log.info("Listing table names "); for (String tableName : qldbSession.getTableNames()) { log.info(tableName); } } catch (QldbClientException e) { log.error("Unable to create session.", e); } } }
    注記
    • 台帳に対してデータオペレーションを実行するには、PooledQldbDriver または QldbDriver クラスのインスタンスを作成して、特定の台帳に接続する必要があります。これは、前のステップで台帳の作成に使用した AmazonQLDB クライアントとは異なるクライアントオブジェクトです。前のクライアントは、「Amazon QLDB API リファレンス」に示されている管理 API オペレーションの実行にのみ使用されます。

      QldbDriver でカスタムセッションプールを実装する必要がない限り、PooledQldbDriver を使用することをお勧めします。PooledQldbDriver のデフォルトプールサイズは、セッションクライアントが許可する開いている HTTP 接続の最大数です。

    • まず、PooledQldbDriver オブジェクトを作成します。このドライバーを作成するときに台帳名を指定する必要があります。

      次に、このドライバーの execute メソッドを使用して、PartiQL ステートメントを実行できます。または、このプールされたドライバーオブジェクトから手動でセッションを作成し、セッションの execute メソッドを使用することもできます。セッションは、台帳との 1 つの接続を表します。

    • オプションで、トランザクション例外の最大再試行回数を指定できます。execute メソッドは、オプティミスティック同時実行制御 (OCC、optimistic concurrency control) の競合やその他の一般的な一時例外を、この設定可能な制限に達するまで自動的に再試行します。デフォルト値は、「4」です。

      この制限に達した後もトランザクションが成功しない場合、ドライバーが例外をスローします。詳細については、「Amazon QLDB でドライバーが使用する再試行ポリシーを理解する」を参照してください。

  2. ConnectToLedger.java プログラムをコンパイルし実行して、vehicle-registration 台帳へのデータセッション接続をテストします。

AWS リージョン のオーバーライド

サンプルアプリケーションは、前提条件のステップ デフォルトの AWS の認証情報とリージョンを設定する で説明されているように設定できる、デフォルトの AWS リージョン で QLDB に接続します。QLDB セッションクライアントビルダープロパティを変更することで、リージョンを変更することもできます。

2.x

次のサンプルコードは、新しい QldbSessionClientBuilder オブジェクトをインスタンス化します。

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.qldbsession.QldbSessionClientBuilder; // This client builder will default to US East (Ohio) QldbSessionClientBuilder builder = QldbSessionClient.builder() .region(Region.US_EAST_2);

region メソッドを使用して、利用可能な任意のリージョンで、QLDB を対象としてコードを実行できます。完全なリストについては、「AWS 全般のリファレンス」の「Amazon QLDB エンドポイントとクォータ」を参照してください。

1.x

次のサンプルコードは、新しい AmazonQLDBSessionClientBuilder オブジェクトをインスタンス化します。

import com.amazonaws.regions.Regions; import com.amazonaws.services.qldbsession.AmazonQLDBSessionClientBuilder; // This client builder will default to US East (Ohio) AmazonQLDBSessionClientBuilder builder = AmazonQLDBSessionClientBuilder.standard() .withRegion(Regions.US_EAST_2);

withRegion メソッドを使用して、利用可能な任意のリージョンで、QLDB を対象としてコードを実行できます。完全なリストについては、「AWS 全般のリファレンス」の「Amazon QLDB エンドポイントとクォータ」を参照してください。

vehicle-registration 台帳にテーブルを作成するには、「ステップ 3: テーブル、インデックス、およびサンプルデータを作成する」に進みます。