LoginSignup
1
0

More than 3 years have passed since last update.

DAXをAWScalaのDynamoDBラッパーから扱う

Last updated at Posted at 2019-09-21

aws-sdk-javaをscalaからscala wayで利用するためのラッパーライブラリAWScalaのDynamoDBラッパーからDAXを操作するという話です。

AWScala

ClusterDaxClientを継承し、AWScalaのDynamoDBトレイトを継承した独自クラスを定義する

AWScalaのDynamoDBラッパーは、DynamoDBトレイトをクライアントとして、putやgetといった操作のimplicit引数にとるので、DynamoDBトレイトを継承することができれば、DynamoDBラッパーからDAXを操作することができます。

詳細はDynamoDBラッパーのテストケースを参照
テストケース

なので、以下のようなクラスを用意します。

import awscala.dynamodbv2.DynamoDB
import com.amazon.dax.client.dynamodbv2.{ClientConfig, ClusterDaxClient}

/**
  * AWS公式のDAXクライアントにawscalaのDynamoDBトレイトをかぶせることで、
  * awscalaのDynamoDBクライアントと同じように扱えるようにした
  */
class DaxClient(cfg: ClientConfig) extends ClusterDaxClient(cfg) with DynamoDB{

}

上記のクラス定義が可能な理由

DynamoDBトレイトは、以下のようにaws-sdk-javaのAmazonDynamoDBインターフェイスを継承しています

trait DynamoDB extends aws.AmazonDynamoDB

AmazonDynamoDBインターフェイスを実装しているクラスであれば、DynamoDBトレイトを継承できそうです。

一方、ClusterDaxClientは以下のように、AbstractAmazonDynamoDBという抽象クラスを継承しています。

public class ClusterDaxClient extends AbstractAmazonDynamoDB implements AmazonDaxClient

そして、AbstractAmazonDynamoDB抽象クラスは、以下のようにAmazonDynamoDBインターフェイスを実装しています。

public class AbstractAmazonDynamoDB implements AmazonDynamoDB

ClusterDaxClientはAmazonDynamoDBインターフェイスを実装しているため、結果的に上記の独自クラスのような定義が可能となっています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0