SlideShare a Scribd company logo
1 of 23
Download to read offline
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!
ありがとうございました

More Related Content

What's hot

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

What's hot (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 to Spring I/O 2016 Spring 5について

今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJavaTakashi Ito
 
Java9 and Project Jigsaw
Java9 and Project JigsawJava9 and Project Jigsaw
Java9 and Project Jigsawtakezoe
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309Nobuhiro Sue
 
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 発の最新技術トレンドを一気にキャッチアップ-PE-BANK
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5Takahiro YAMADA
 
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoOpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoTakahiro YAMADA
 
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語るOracle jdk 20190827 - 今、あらためてOracle提供のJDKを語る
Oracle jdk 20190827 - 今、あらためてOracle提供のJDKを語るオラクルエンジニア通信
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?これからのJDK/JVM 何を選ぶ?どう選ぶ?
これからのJDK/JVM 何を選ぶ?どう選ぶ?Takahiro YAMADA
 
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 SEYuichi Sakuraba
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradleNobuhiro Sue
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方JDKの選択肢とサーバーサイドでの選び方
JDKの選択肢とサーバーサイドでの選び方Takahiro YAMADA
 
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本
これからのJDK 何を選ぶ?どう選ぶ? (v1.2) in 熊本Takahiro YAMADA
 
KotlinでROSノードを書いてみた
KotlinでROSノードを書いてみたKotlinでROSノードを書いてみた
KotlinでROSノードを書いてみたNaoki Iwata
 
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートデモで楽しむ Visual Studio 2022 & .NET 6 最新アップデート
デモで楽しむ Visual Studio 2022 & .NET 6 最新アップデートAkira Inoue
 

Similar to 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について