Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Spring I/O 2016 Spring 5について

1,363 views

Published on

間違いなどありましたらぜひご指摘いただければと思います。

Published in: Software
  • Be the first to comment

Spring I/O 2016 Spring 5について

  1. 1. Tagbangers, inc. Alisa Sasaki 2016 About Spring5
  2. 2. 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月末
  3. 3. Spring Framework 5.0のテーマ JDK9 & Jigsawモジュール Servlet4.0 & HTTP/2 Reactiveアーキテクチャ
  4. 4. JDK9 & Jigsawモジュール Jigsaw? Moduleの概念をJDKに導入すること • jarの依存関係を明確にする • パッケージの公開範囲を設定できる • モジュール単位でアプリに必要な部分だけロード することができる module package Class & Interface Field & Method Purpose • Java SEおよびJDKをスモールデバイス向けにスケールダウンできるように • Jar内のライブラリ同士のコンフリクトを防ぎたい • 内部のAPIを壊すことなく変更したい
  5. 5. 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; }
  6. 6. 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
  7. 7. 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(ヘッダ圧縮)パラメタ
  8. 8. 会場で人気のあったセッショントップ3 Keynote day 2: Designing Applications: The Reactive Way
  9. 9. 時代の流れと経緯
  10. 10. Reactiveとは データフローと時(イベント)とともに変わる振る舞いの伝播を扱う、 その仕組み Reactive Programmingに必要なツール Reactive Programming: 特に外部のリソースとのやりとりのときにおいて 非同期・ノンブロッキング・関数型スタイルで記述していく方法 • Reactive Streams • Reactive API
  11. 11. とてもざっくりしたReactive Streams Data Stream この人を 効率よく動かす blocking 次、1名どうぞ! 非同期データストリームを ノンブロッキングなback pressureで処理していくこと Back pressure
  12. 12. さらにざっくりなReactive Streams ・Publisher ・Subscriber ・Subscription ・Processor Publisher Subscriber onNext onError onComplete Request Cancel Java9でjava.util.concurrent.Flowに含められる予定
  13. 13. 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 違うスレッドで発生するかも
  14. 14. 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)を使おう…
  15. 15. 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
  16. 16. https://speakerdeck.com/sdeleuze/a‐lite‐rx‐api‐for‐the‐jvm
  17. 17. 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
  18. 18. 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(); }
  19. 19. Thymeleaf 3.0 Reactive Friendliness Engine throttling シングルスレッド・back-pressure管理・Cold observable 1process https://github.com/thymeleaf/thymeleafsandbox-springreactive
  20. 20. むすびに
  21. 21. http://wallride.org/ Multilingual easy-to-customize CMS (OSS) Spring Framework Hibernate Thymeleaf WallRide
  22. 22. MUCHAS GRACIAS! ありがとうございました

×