Portland Java User Group Portland Oregon August 28, 2018
Sean SullivanAugust 28, 2018Portland Java User GroupAWS SDK for Javaversion 2.0
View Slide
software engineer22 years on the JVMPortland Oregonback office systemsHudson’s Bay CompanyAbout me
AgendaHudson’s Bay CompanySDK for Java• version 1.x• version 2.xScala and AWS
https://en.wikipedia.org/wiki/Hudson%27s_Bay_Company
TorontoNYC
saksfifthavenue.comsaksoff5th.comlordandtaylor.comthebay.com
saksfifthavenue.com
walmart.com
HBC Tech stack
WebCheckoutAndroidCheckoutiPhoneCheckoutCheckoutservice
AWS SDK for Java
SDK v2announcedJune 2017@awsforjava
“Under the hood, we use anHTTP client built on top ofNetty to make the non-blocking HTTP call”“first class support fornon-blocking I/Oin our async clients”source: AWS Developer Blog
import java.util.concurrent.CompletableFuture;DynamoDBAsyncClient client = DynamoDBAsyncClient.builder().region(Region.US_WEST_2).build();CompletableFuture response =client.listTables(ListTablesRequest.builder().build());CompletableFuture> tableNames =response.thenApply(ListTablesResponse::tableNames);tableNames.whenComplete((tables, err) -> {if (tables != null) {tables.forEach(System.out::println);} else {err.printStackTrace();}});SDK v2
Github projectsaws-sdk-java aws-sdk-java-v2
SDK v2Developer Preview
Pull Request
$ cd aws-sdk-java-v2$ git log | grep 'Author: Sean Sullivan' | wc -l39
SDK v2Maven artifacts
https://search.maven.org/
com.amazonawsaws-java-sdk-dynamodb1.11.397Maven dependenciesSDK v1software.amazon.awssdkdynamodb2.0.1SDK v2
import com.amazonaws.services.cloudwatch.AmazonCloudWatchClient;import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder;import com.amazonaws.services.cloudwatch.model.MetricDatum;import com.amazonaws.services.cloudwatch.model.PutMetricDataRequest;Java packagesSDK v1import software.amazon.awssdk.services.cloudwatch.CloudWatchAsyncClient;import software.amazon.awssdk.services.cloudwatch.model.MetricDatum;import software.amazon.awssdk.services.cloudwatch.model.PutMetricDataRequest;SDK v2
distinct Maven artifact namesdistinct Java package namesSDK v2 and SDK v1can co-exist in aJava applicationSDK v1 jarSDK v2 jar
SDK v2 programming API• Immutable clients and models• Enhanced pagination• Smart configuration merging• Forward-compatible enums• Streaming operations as first-classconcepts
AWS SDK v2in a Scalaapplication?
val awsSdkVersion = “2.0.1""org.scala-lang.modules" %% "scala-java8-compat" % “0.9.0","software.amazon.awssdk" % "cloudwatch" % awsSdkVersion,"software.amazon.awssdk" % "dynamodb" % awsSdkVersionbuild.sbt
import scala.compat.java8.FutureConverters._import scala.collection.JavaConverters._Foo.scala
FutureConverters?
java.util.concurrent.CompletableFuturescala.concurrent.Future
FutureConverters.scala
gfc-aws-cloudwatch
“A tiny Scala wrapperaround AWS CloudWatchJava client”gfc-aws-cloudwatch
https://github.com/gilt/gfc-aws-cloudwatch
how to migrategfc-aws-cloudwatchfromSDK v1 to SDK v2 ?
https://github.com/gilt/gfc-aws-cloudwatch/pull/8/files
ConclusionSDK v1 — production readySDK v2 — coming soongithub.com/awstwitter.com/awsforjava
The end
Bonus material
“Developing Applications on AWS in the JVM”AWS re:Invent 2017
https://www.slideshare.net/AmazonWebServices/dev205developing-applications-on-aws-in-the-jvm