SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
Tagbangers, inc.
Alisa Sasaki
2016
About Spring5
Spring Framework 5.0マイルストーン
5.0 GA?
3月
JDK9 release?
※JDP 9のリリースが遅れると、
Spring 5.0のリリースもおそらく遅れる模様。
5.0RELEASE
12月
2016 2017
5.0 RC14.3 GA
6月
5.0 M1
7月末
Spring Framework 5.0のテーマ
JDK9 & Jigsawモジュール
Servlet4.0 & HTTP/2
Reactiveアーキテクチャ
JDK9 & Jigsawモジュール
Jigsaw?
Moduleの概念をJDKに導入すること
• jarの依存関係を明確にする
• パッケージの公開範囲を設定できる
• モジュール単位でアプリに必要な部分だけロード
することができる
module
package
Class & Interface
Field & Method
Purpose
• Java SEおよびJDKをスモールデバイス向けにスケールダウンできるように
• Jar内のライブラリ同士のコンフリクトを防ぎたい
• 内部のAPIを壊すことなく変更したい
Spring 5のjar:Jigsaw メタデータが付帯される
モジュール名はMaven central jarのネーミングに従う
(spring-context, sprint-jdbc, spring-webmvc..)
JDK9 & Jigsawモジュール
こんな風に変わります
module my.app.db {
requires java.sql;
requires spring.jdbc;
}
Servlet4.0 & HTTP/2
We need to embrace HTTP/2
in the Java land as well!
プロトコルの仕様(HTTP/1.1)に起因するパフォーマンスの悪さ
・1ドメインにリクエストする数が制限されている
・リクエストの順番どおりにレスポンスを返す必要がある(HoLブロッキング)
Problem
HTTP/2 (https://http2.github.io/faq/)
バイナリフレーム・ストリームの概念などを採用
リクエストとレスポンスを多重化して高速化を図る
http://webdesignledger.com
1 request ≠ 1 response
JDK9もHTTP/2対応
Servlet4.0 & HTTP/2
HTTP/2対応を行っているServlet4.0と
JDK 9 HTTP Clientのサポートにフォーカスする
Servlet4.0
サーバサイドJavaへのHTTP/2サポートを提供する
• ストリーム優先度付
• サーバプッシュ
• リクエスト/レスポンスの多重化
Tomcat 8.1/9.0
Jetty 9.3
Undertow 1.3
• HTTP Client API
• HTTP/1.1からのプロトコルスイッチング
• サーバプッシュ
• HPACK(ヘッダ圧縮)パラメタ
• サーバプッシュ
• HPACK(ヘッダ圧縮)パラメタ
会場で人気のあったセッショントップ3
Keynote day 2: Designing Applications: The Reactive Way
時代の流れと経緯
Reactiveとは
データフローと時(イベント)とともに変わる振る舞いの伝播を扱う、
その仕組み
Reactive Programmingに必要なツール
Reactive Programming:
特に外部のリソースとのやりとりのときにおいて
非同期・ノンブロッキング・関数型スタイルで記述していく方法
• Reactive Streams
• Reactive API
とてもざっくりしたReactive Streams
Data Stream
この人を
効率よく動かす
blocking
次、1名どうぞ!
非同期データストリームを
ノンブロッキングなback pressureで処理していくこと
Back pressure
さらにざっくりなReactive Streams
・Publisher
・Subscriber
・Subscription
・Processor
Publisher Subscriber
onNext
onError
onComplete
Request
Cancel
Java9でjava.util.concurrent.Flowに含められる予定
Asyncな書き方を求めて
public interface UserRepository {
Future<User> findById(String id) throws IOException;
..
}
try {
Future<User> future = repository.findById(id);
User use = future.get(); //block
}
catch (InterruptedException e) {
//
}
catch (ExecutionException e) {
//
}
Ugh
違うスレッドで発生するかも
CompletableFuture<User> future = repository.findById(id);
future.whenComplete(user, throwable) ‐> {
// ...
}
public interface UserRepository {
...
CompletableFuture<List<User>> findAll();
...
}
CompletableFuture→Stream(JDK8)→…
Async callback!
Userが全部集まるまでコールバックしない
Reactive Streamsを使おう
複数の値を効率よく扱える
データごとに通知がもらえる
Stream(JDK8)を使おう…
Publisher Subscriber
onNext
onError
onComplete
Request
Cancel
Mono
Reactor Core 2.5~
Flux
(旧Stream)
Flux and Mono(Reactor)
implements
最大1個の値を出力するPublisher
( 単発の値を返す非同期処理用)
最大N個の値を出力するPublisher
(ストリーム)
subscribe されてはじめて実行される
Reactive
API
https://speakerdeck.com/sdeleuze/a‐lite‐rx‐api‐for‐the‐jvm
CompletableFuture<String> future =
Mono.fromCompletableFuture(someCompletableFuture)
.timeout(Duration.ofSeconds(30))
.log("hello")
.toCompletableFuture();
Stream<?> future =
Flux.fromStream(anotherStream)
.timeout(Duration.ofSeconds(30))
.log("hello")
.stream();
CompletableFuture→Mono
Java8 Stream→Flux
Controller with Reactive types
repository.findAll()
.filter(user ‐> user.getName().matches("K.*"))
.map(user ‐> "Name: " + user.getName())
.log()
.subscribe(user ‐> {});
public interface UserRepository {
Mono<User> findById(Long id);
Flux<User> findAll();
Mono<User> save(User user);
}
データフローを発生させる
Defaultはすべてのデータを取得する(データ取得制限なし)
@RequestMapping("/users")
public Flux<User> getUsers() {
return this.userRepository.findAll();
}
Thymeleaf 3.0 Reactive Friendliness
Engine throttling
シングルスレッド・back-pressure管理・Cold observable
1process
https://github.com/thymeleaf/thymeleafsandbox-springreactive
むすびに
http://wallride.org/
Multilingual easy-to-customize CMS (OSS)
Spring Framework
Hibernate
Thymeleaf
WallRide
MUCHAS GRACIAS!
ありがとうございました

Más contenido relacionado

La actualidad más candente

Azure osc
Azure oscAzure osc
Azure osc
fumios
 

La actualidad más candente (6)

Azure DevOps入門~TechLab編
Azure DevOps入門~TechLab編Azure DevOps入門~TechLab編
Azure DevOps入門~TechLab編
 
Azure DevOpsとセキュリティ
Azure DevOpsとセキュリティAzure DevOpsとセキュリティ
Azure DevOpsとセキュリティ
 
Azure DevOps Management in Organization
Azure DevOps Management in OrganizationAzure DevOps Management in Organization
Azure DevOps Management in Organization
 
Lightning componentとlightning design system
Lightning componentとlightning design systemLightning componentとlightning design system
Lightning componentとlightning design system
 
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
[DO02] Jenkins PipelineとBlue Oceanによる、フルスクラッチからの継続的デリバリ
 
Azure osc
Azure oscAzure osc
Azure osc
 

Similar a Spring I/O 2016 Spring 5について

Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
Nobuhiro Sue
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
Nobuhiro Sue
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
kimukou_26 Kimukou
 

Similar a Spring I/O 2016 Spring 5について (20)

今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava
 
Java9 and Project Jigsaw
Java9 and Project JigsawJava9 and Project Jigsaw
Java9 and Project Jigsaw
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
 
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoOpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
 
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語るOracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
 
JDK: 新しいリリースモデル解説(ver.2.0)
JDK: 新しいリリースモデル解説(ver.2.0)JDK: 新しいリリースモデル解説(ver.2.0)
JDK: 新しいリリースモデル解説(ver.2.0)
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?
 
Oracle Code One - Java KeynoteとJava SE
Oracle Code One - Java KeynoteとJava SEOracle Code One - Java KeynoteとJava SE
Oracle Code One - Java KeynoteとJava SE
 
Oracle GoldenGate Cloud Serviceユーザーズガイド
Oracle GoldenGate Cloud ServiceユーザーズガイドOracle GoldenGate Cloud Serviceユーザーズガイド
Oracle GoldenGate Cloud Serviceユーザーズガイド
 
JS7 JobScheduler プレビュー
JS7 JobScheduler プレビューJS7 JobScheduler プレビュー
JS7 JobScheduler プレビュー
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
 
KotlinでROSノードを書いてみた
KotlinでROSノードを書いてみたKotlinでROSノードを書いてみた
KotlinでROSノードを書いてみた
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
 

Spring I/O 2016 Spring 5について