Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS SDK for Java version 2 - NYJavaSIG 2019-11-21
Search
sullis
November 21, 2019
Programming
0
90
AWS SDK for Java version 2 - NYJavaSIG 2019-11-21
AWS SDK for Java version 2.x
NY JavaSIG
November 21, 2019
#nyjavasig
#awscloud
#awssdk
#java
sullis
November 21, 2019
Tweet
Share
More Decks by sullis
See All by sullis
Netty Chicago Java User Group 2024-04-17
sullis
0
240
Java 21 - Portland Java User Group 2023-10-24
sullis
0
230
Microbenchmarking with JMH - Portland 2023-03-14
sullis
0
100
Code generation on the Java VM 2022-04-19
sullis
0
83
Mockito 2022-01-25
sullis
0
150
GitHub Actions 2021-12-16
sullis
0
28
Apache Struts and the Equifax data breach 2021-06-03
sullis
0
46
Guardrail State of the Union 2021-04-13
sullis
0
280
Guardrail: State of the Union 2021-03-18
sullis
0
140
Other Decks in Programming
See All in Programming
WebGLで始める コンピュータグラフィックス入門
heller77
0
370
ソースコードを美しくたもつために ~コードレビューの認知限界を突破し、年間400リリースを達成する~
kotauchisunsun
1
150
Criando a Woovi em uma semana
daniloab
0
120
Apache Hive 4 on Treasure Data
ryukobayashi
1
480
戦略的DDDは重いのか? / Is strategic DDD heavy?
pictiny
3
2k
How to improve maintainability and readability of your automated tests? ( #scrumniigata )
teyamagu
PRO
1
120
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
12
4.3k
Embedding it into Ruby code
soutaro
0
190
GitLab CI/CD で C#/WPFアプリケーションのテストとインストーラーのビルド・デプロイを自動化する
hacarus
0
600
RaaP
ksss
0
140
Productivity is Messing Around and Having Fun
hollycummins
1
170
Webアプリをできるだけコードを手書きしないで作ってみる
tomokusaba
2
230
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
323
20k
Testing 201, or: Great Expectations
jmmastey
30
6.4k
Design by the Numbers
sachag
274
18k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
23
1.7k
How GitHub (no longer) Works
holman
305
140k
Designing for Performance
lara
601
67k
Unsuck your backbone
ammeep
664
57k
Being A Developer After 40
akosma
67
580k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
21
1.6k
Navigating Team Friction
lara
179
13k
A Tale of Four Properties
chriscoyier
153
22k
Art, The Web, and Tiny UX
lynnandtonic
290
19k
Transcript
Sean Sullivan November 21, 2019 NY JavaSIG AWS SDK for
Java version 2.x
software engineer Portland Oregon Java Scala About me
Agenda SDK for Java 2.x SDK internals Migrating from v1
to v2 Scala and SDK v2
AWS SDK for Java
SDK v2 announced June 2017 @awsforjava
“Under the hood, we use an HTTP client built on
top of Netty to make the non- blocking HTTP call” “first class support for non-blocking I/O in our async clients” source: AWS Developer Blog
“The AWS SDK for Java 2.0 asynchronous client methods return
CompletableFuture objects” source: SDK v2 Developer Guide
import java.util.concurrent.CompletableFuture; DynamoDBAsyncClient client = DynamoDBAsyncClient.builder() .region(Region.US_WEST_2) .build(); CompletableFuture<ListTablesResponse> response
= client.listTables(ListTablesRequest.builder().build()); CompletableFuture<List<String>> tableNames = response.thenApply(ListTablesResponse::tableNames); tableNames.whenComplete((tables, err) -> { if (tables != null) { tables.forEach(System.out::println); } else { err.printStackTrace(); } }); SDK v2
Github projects aws-sdk-java aws-sdk-java-v2
SDK v2
Pull Request
SDK v2 Maven artifacts
https://search.maven.org/
<dependency> <groupId>com.amazonaws<groupId> <artifactId>aws-java-sdk-dynamodb</artifactId> <version>1.11.679</version> </dependency> Maven dependencies SDK v1 <dependency>
<groupId>software.amazon.awssdk<groupId> <artifactId>dynamodb</artifactId> <version>2.10.20</version> </dependency> SDK 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 packages
SDK v1 import 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 names distinct Java package names SDK v2
and SDK v1 can co-exist in a Java application SDK v1 jar SDK v2 jar
SDK v2 programming API • Immutable clients and models •
Enhanced pagination • Smart configuration merging • Forward-compatible enums • Streaming operations as first-class concepts
SDK internals
<slf4j.version>1.7.28</slf4j.version> <jackson.version>2.10.0</jackson.version> <netty.version>4.1.42.Final</netty.version> Transitive dependencies
“To provide SDK support for the many services that AWS
owns, the AWS SDKs make extensive use of code generation” Code generation https://aws.amazon.com/blogs/developer/aws-sdk-for-java-2-x-released/
Why code generation?
less boilerplate more consistency Why code generation?
class names parameter names method names exception names Consistency error
handling logging JSON serialization network I/O
AWS SDK for Java v2
JavaPoet AWS SDK for Java v2
Migrating code from v1 to v2
aws-secretsmanager-caching-java
https://github.com/aws/aws-secretsmanager-caching-java/
“AWS Secrets Manager Java caching client enables in-process caching of
secrets for Java applications” aws-secretsmanager-caching-java
aws-secretsmanager-caching-java is based on AWS SDK v1
https://github.com/aws/aws-secretsmanager-caching-java/issues/
how to migrate aws-secretsmanager- caching-java from SDK v1 to SDK
v2 ?
https://github.com/ aws/aws- secretsmanager- caching-java/pull/6
https://github.com/aws/aws-secretsmanager-caching-java/pull/6/files
https://github.com/aws/aws-secretsmanager-caching-java/pull/6/files
Scala and AWS SDK v2
val awsSdkVersion = “2.10.20” "org.scala-lang.modules" %% "scala-java8-compat" % “0.9.0", "software.amazon.awssdk"
% "cloudwatch" % awsSdkVersion, "software.amazon.awssdk" % "dynamodb" % awsSdkVersion build.sbt
import scala.compat.java8.FutureConverters._ import scala.collection.JavaConverters._
FutureConverters?
java.util.concurrent.CompletableFuture scala.concurrent.Future
FutureConverters.scala
migrating a Scala library from AWS SDK v1 to v2
“A tiny Scala wrapper around AWS CloudWatch Java client” gfc-aws-cloudwatch
https://github.com/gilt/gfc-aws-cloudwatch
https://github.com/ gilt/gfc-aws- cloudwatch/pull/8/ files
None
None
Conclusion SDK v1 — production ready SDK v2 — production
ready github.com/aws twitter.com/awsforjava
The end
None
Bonus material
“Hands-on in the AWS Java Ecosystem” AWS re:Invent 2018
“Developing Applications on AWS in the JVM” AWS re:Invent 2017
https://www.slideshare.net/AmazonWebServices/ dev205developing-applications-on-aws-in-the-jvm