Diese Präsentation wurde erfolgreich gemeldet.
Die SlideShare-Präsentation wird heruntergeladen. ×

Spring I/O 2015 報告

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Hier ansehen

1 von 63 Anzeige

Weitere Verwandte Inhalte

Diashows für Sie (20)

Ähnlich wie Spring I/O 2015 報告 (20)

Anzeige

Aktuellste (20)

Spring I/O 2015 報告

  1. 1. Copyright©2015 NTT corp. All Rights Reserved. Spring I/O 2015 報告 2015年6月22日 @ Spring I/O 2015 報告会 岩塚 卓弥 ソフトウェア革新技術プロジェクト NTT ソフトウェアイノベーションセンタ
  2. 2. 2Copyright©2015 NTT corp. All Rights Reserved. • 名前:岩塚 卓弥 • 所属:NTT ソフトウェアイノベーションセンタ • 研究分野:ソフトウェア工学 • ソフトウェア開発の生産性向上を目指す取り組みの一つとし て、APフレームワークの整備に取り組む • その他: • 名古屋出身 • プログラミング言語/ソフトウェアの形式的検証技術 に関心 • Spring については newbie なのでお手柔らかに! 自己紹介
  3. 3. 3Copyright©2015 NTT corp. All Rights Reserved. Spring 編
  4. 4. 4Copyright©2015 NTT corp. All Rights Reserved. • Core Container の改善 → Modern Java Component Design with Spring Framework 4.2 • データアクセス の改善 • JMS の改善 • Web の改善 → Spring4 Web Apps • WebSocketメッセージング の改善 → Real-time with Spring: SSE and WebSockets • テスト の改善 → Testing with Spring 4.x Spring 4.2 の新機能と改善 From https://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/htmlsingle/#new-in-4.2
  5. 5. 5Copyright©2015 NTT corp. All Rights Reserved. WEB の改善 SPRING 4.2編
  6. 6. 6Copyright©2015 NTT corp. All Rights Reserved. •HTTPストリーミング と SSE •CompletableFuture のサポート •CORS のビルトインサポート •HTTPキャッシュの改善 •JavaScript View テンプレート Webの改善
  7. 7. 7Copyright©2015 NTT corp. All Rights Reserved. • カスタム@RequestMapping • Request Mapping の実行時制御 • RequestBodyAdvice • @ExceptionHandler の引数に HandlerMethod • HttpHeaders の Byte-range リクエストのサポート • UriTemplateHandler • MvcUriComponentsBuilder の改善 Webの改善
  8. 8. 8Copyright©2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE Web の改善
  9. 9. 9Copyright©2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多
  10. 10. 10Copyright©2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多 HTTPリクエスト
  11. 11. 11Copyright©2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多 HTTPリクエスト HTTPレスポンス
  12. 12. 12Copyright©2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多 HTTPリクエスト PUSH(Event1) Event1 HTTPレスポンス
  13. 13. 13Copyright©2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多 HTTPリクエスト Event1 Event2 PUSH(Event2) HTTPレスポンス
  14. 14. 14Copyright©2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多 … HTTPリクエスト Event1 Event2 … HTTPレスポンス
  15. 15. 15Copyright©2015 NTT corp. All Rights Reserved. HTTPストリーミング の使い方 ResponseBodyEmitter を作成 イベントをPUSH 何度もPUSH やめる 作成した emitter を返す その後、別のスレッドで…
  16. 16. 16Copyright©2015 NTT corp. All Rights Reserved. • SSE(Server-Sent Events) • W3C勧告 • PUSHされるイベントのフォーマットが定められている SSE の使い方 ResponseBodyEmitter の代わりに SseEmitter を作成 SSEのフォーマットイベントをPUSH
  17. 17. 17Copyright©2015 NTT corp. All Rights Reserved. • IEはSSE未対応 • 以下のような用途には向かない • オンラインゲーム • コレボレーションツール • 金融アプリケーション 注意点 これらの場合にはWebSocketの使用を検討
  18. 18. 18Copyright©2015 NTT corp. All Rights Reserved. CompletableFuture のサポート Web の改善
  19. 19. 19Copyright©2015 NTT corp. All Rights Reserved. Java8で導入された非同期処理用のクラス 豊富な機能を持つ • コールバック指定 • タイムアウトの設定 • 実行の中断 • 複数の並行処理の同期 等 CompletableFuture
  20. 20. 20Copyright©2015 NTT corp. All Rights Reserved. DeferredResult と CompletableFuture DeferredResult CompletableFuture isSetOrExpired isDone onCompletion whenComplete onTimeout exceptionally setResult complete setErrorResult completeExceptionally DeferredReslut でできることは だいたいCompletableFutureでもできる
  21. 21. 21Copyright©2015 NTT corp. All Rights Reserved. リクエストに対して非同期処理の結果を返す Before DeferredResultを返す その後、別のスレッドで…
  22. 22. 22Copyright©2015 NTT corp. All Rights Reserved. リクエストに対して非同期処理の結果を返す After CompletableFutureを返す その後、別のスレッドで…
  23. 23. 23Copyright©2015 NTT corp. All Rights Reserved. CORSのビルトインサポート Web の改善
  24. 24. 24Copyright©2015 NTT corp. All Rights Reserved. • 同一オリジンポリシー • セキュリティのため、オリジンの異なるリソースへの AJAX等の通信を禁止 • CORS • 異なるオリジンへのリソースへ安全にアクセスするた めに定められた仕様 CORS(Cross Origin Resource Sharing) http://xxx.com:80 https://yyy.org:8080 HTMLを取得 AJAX等 ドメイン, ポート等 リクエスト オリジンA オリジンB オリジンC 選別する
  25. 25. 25Copyright©2015 NTT corp. All Rights Reserved. CORSのサポート @CrossOrigin After Before サードパーティのライブラリ等を利用 @CrossOrigin でクラス/メソッド単位に設定 例:CORS Filter(http://software.dzhuvinov.com) web.xml で一括フィルタリング
  26. 26. 26Copyright©2015 NTT corp. All Rights Reserved. • JavaConfig • XML 一括でフィルタリングしたいとき CorsRegistory にマッピングを追加 mvc:cors にマッピングを追加
  27. 27. 27Copyright©2015 NTT corp. All Rights Reserved. HTTPキャッシュの改善 Web の改善
  28. 28. 28Copyright©2015 NTT corp. All Rights Reserved. Cache-Control ヘッダ HTTPレスポンスのヘッダでコンテンツの キャッシュの扱いを指定する Cache-Control: no-store 例: キャッシュしない Cache-Control: max-age=3600, private キャッシュしたレスポンスは3600秒間有効 キャッシュを他のユーザと共有しない
  29. 29. 29Copyright©2015 NTT corp. All Rights Reserved. Cache-Control の設定方法 Before WebContentInterceptor に設定 After 新しく追加された CacheControl ビルダを利用 プロパティをチェイン
  30. 30. 30Copyright©2015 NTT corp. All Rights Reserved. JavaScript View テンプレート Web の改善
  31. 31. 31Copyright©2015 NTT corp. All Rights Reserved. JavaScript View テンプレート JavaScriptのテンプレートエンジンをサーバ側で実行 1. 初期ページ読み込み速度の改善 → 特にリソースの限られたモバイル環境で影響大 2. クライアント/サーバ のコード共通化 → 最近流行りの Isomorphic JavaScript 3. SEO対策 → JavaScriptを解釈しないロボットでも コンテンツを取得できる
  32. 32. 32Copyright©2015 NTT corp. All Rights Reserved. •Handlebars http://handlebarsjs.com/ •EJS http://www.embeddedjs.com/ •Mustache https://mustache.github.io/ •React https://facebook.github.io/react/ JavaScript View テンプレート
  33. 33. 33Copyright©2015 NTT corp. All Rights Reserved. • Controller • テンプレート(Handlebars) 使い方 コンテンツの設定 “Page Title”に置換される
  34. 34. 34Copyright©2015 NTT corp. All Rights Reserved. Configの書き方 ScriptTemplateViewResolver ScriptTemplateConfigurer JRuby, Jythonも (JSR223)
  35. 35. 35Copyright©2015 NTT corp. All Rights Reserved. WEBSOCKETメッセージング の改善 SPRING 4.2編
  36. 36. 36Copyright©2015 NTT corp. All Rights Reserved. • メッセージに対する@JsonViewのサポート • 接続ユーザ情報の取得 • サーバをまたがるUser Destinationの解決 • StompSubProtocolErrorHandler • グローバルな@MessageExceptionHandler • SimpleBrokerMessageHandler の改善 WebSocketメッセージングの改善
  37. 37. 37Copyright©2015 NTT corp. All Rights Reserved. • STOMPクライアント over TCP/WebSocket • @SendTo, @SendToUser の改善 • 戻り値に ListenableFuture/CompletableFuture • XMLペイロードのメッセージ/オブジェクト変換 WebSocketメッセージングの改善
  38. 38. 38Copyright©2015 NTT corp. All Rights Reserved. メッセージに対する @JsonViewのサポート WebSocketメッセージング の改善
  39. 39. 39Copyright©2015 NTT corp. All Rights Reserved. • @MessageMapping と @SubscribeMapping の メソッドの戻り値に@JsonView が使用可能に • 今までは@ResponseBody でしか使えなかった → Webの機能への追従が進む メッセージに対する@JsonViewのサポート グループの指定 グループの指定 @JsonView(≧4.1)のおさらい
  40. 40. 40Copyright©2015 NTT corp. All Rights Reserved. テストの改善 SPRING 4.2編
  41. 41. 41Copyright©2015 NTT corp. All Rights Reserved. • SpringJUnit4ClassRunner からRuleへの置き換え • ContextCache • TestContext 周りの改善 • ReflectionTestUtils のstaticフィールドアクセス • @DirtiesContext の改善 • 組み込みDBの名前周りの改善 • AopTestUtils によるProxyのターゲットの取得 テストの改善
  42. 42. 42Copyright©2015 NTT corp. All Rights Reserved. SpringJUnit4ClassRunner か らRuleへの置き換え テストの改善
  43. 43. 43Copyright©2015 NTT corp. All Rights Reserved. • Springの機能をJUnitのテストケース内で使用できる ようにするテストランナー • テストケース内でDIしたいときなどに用いる SpringJUnit4ClassRunner テストランナーはひとつしか指定できない
  44. 44. 44Copyright©2015 NTT corp. All Rights Reserved. 別のテストランナーと併用したいとき Before @BeforeメソッドでTestContextManagerを作成 任意のテストランナー TestContextManager
  45. 45. 45Copyright©2015 NTT corp. All Rights Reserved. 別のテストランナーと併用したいとき After @Ruleと@ClassRuleを使う 必ず二つとも記述すること 任意のテストランナー
  46. 46. 46Copyright©2015 NTT corp. All Rights Reserved. セッション紹介編
  47. 47. 47Copyright©2015 NTT corp. All Rights Reserved. タイトル カテゴリ Building “Bootful” Applications with Spring Boot Boot Building Microservices with Spring Cloud and Netflix OSS Cloud Developing and Maintaining Spring-based Enterprise Software: Lessons Learned 事例 Static Resources Management with Spring and Single Page Applications Web Inside http://spring.io - a production spring reference application 事例 Real-time with Spring: SSE and WebSockets Web Testing with Spring 4.x Test Performance Testing Crash Course その他 Everything you need to know about Java Classloaders その他 Scaling real time search and analytics with Elasticsearch その他 Improving your (legacy) Application with Spring その他 紹介セッション一覧
  48. 48. 48Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Josh Long • デモを交えながらSpring Bootを紹介 • Spring Project Initializer • Web上のインタフェースでプロジェクト雛形を作成 • CommandLineRunner • コマンドライン引数を与えて実行 • REST • ビューにはThymeleafを使用 • Spring Boot Actuator • アプリケーションのモニタリング • 他のセッションでもBootは当たり前のように使用 Building “Bootful” Applications with Spring Boot
  49. 49. 49Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Dave Syer • マイクロサービスの協調動作のためのボイラープレート に Spring Cloud × Netflix OSS を利用 • 設定の管理 • サービス探索 • ロードバランサ • 耐障害性 • … Building Microservices with Spring Cloud and Netflix OSS
  50. 50. 50Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Dave Syer • マイクロサービスの協調動作のためのボイラープレート に Spring Cloud × Netflix OSS を利用 Building Microservices with Spring Cloud and Netflix OSS
  51. 51. 51Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Dave Syer • マイクロサービスの協調動作のためのボイラープレート に Spring Cloud × Netflix OSS を利用 Building Microservices with Spring Cloud and Netflix OSS Histrix Ribbon Eureka Zuul 設定用のアノテーションを提供 e.g. @EnableEurekaClient, @HystrixCommand http://cloud.spring.io/spring-cloud-netflix/
  52. 52. 52Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Mortiz Kleine • ドイツのCMSベンダによるSpring利用時のノウハウ • XMLで設定し、自作のContextInitializerで読み込む • https://gihub.com/mkleine/spring-component-loader • カスタマイズしたXmlBeanDefinitionReaderを使用 • 複数の設定ファイルで同一リソースをインポート する際の冗長なロードの問題(SPR-1142)を避ける • 複雑になるのでAOPは使わない Developing and Maintaining Spring-based Enterprise Software: Lessons Learned
  53. 53. 53Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Brian Clozel@ • 静的リソースの扱いについてのワークショップ • < 4.1 (ワークショップ1) • 任意の場所にリソースを配置 • Cache-Control によるキャッシュ管理 Static Resources Management with Spring and Single Page Applications(Workshop) https://github.com/bclozel/resource-handling-workshop
  54. 54. 54Copyright©2015 NTT corp. All Rights Reserved. • ≧ 4.1 (ワークショップ2[AngularJS], 3[ES6]) • Webjarのビルド • リソースを target/classes/static に配置 • 開発時はプロファイルを切り替えローカルファイル を参照 • fingerprintingによるキャッシュ • ファイル名ベースのバージョニング • Minify等はクライアントサイドのツールを使う • 講演者:Brian Clozel@ • 静的リソースの扱いについてのワークショップ Static Resources Management with Spring and Single Page Applications(Workshop) https://github.com/bclozel/resource-handling-workshop
  55. 55. 55Copyright©2015 NTT corp. All Rights Reserved. • 講演者: Brian Clozel • Springの公式サイト(http://spring.io)自体のプロ ジェクト(Sagan)について • クライアントサイドリソースの管理 • Spring Bootの利用 • Java8(lambda, stream)によるリファクタリング • Spring IO Platformへの移行 • HipChatを利用したコミュニケーション • Blue/Greenデプロイメント Inside http://spring.io - a production spring reference application
  56. 56. 56Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Sergi Almar • SpringにおけるSSE, WebSocket の利用法を紹介 • SSE, WebSocket についての解説 • Spring 4.2におけるSSEの利用法 • 本日解説済み! • Spring のWebSocket と JSR-356 の違い • SockJS によるフォールバック • STOMP のサポート • セキュリティ Real-time with Spring: SSE and WebSockets
  57. 57. 57Copyright©2015 NTT corp. All Rights Reserved. • 講演者:San Brannen • Spring4.0, 4.1のテスト関連機能の紹介 • Spring4.2で導入される機能の紹介 • 本日解説しなかった内容 • @DirtiesContext にbefore method, before classを 追加 • 組み込みデータベースに対する固有名の生成 • <jdbc:embedded-database />に database-name 属性を 追加 • ReflectionTestUtilsでstaticなフィールドにアクセス Testing with Spring 4.x
  58. 58. 58Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Dustin Whittle • 多数のアプリケーションの性能試験ツール/サービスの 紹介 • 汎用 • Apache Bench • Seige • Apache JMeter • Multi-Mechanize • クラウド/分散環境 • Bees with Machine Guns • locust.io • クライアントサイド • Google PageSpeed • WBench Performance Testing Crash Course ・パフォーマンストラッキング ・Statsd + Graphite + Grafana ・webpagetest.org ・SiteSpeed.io ・APP DYNAMICS ・Load testing ・Apica ・BLITZ ・BlazeMeter とにかく沢山紹介
  59. 59. 59Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Oleg Selajev • クラスローダの基本動作とエラー発生時の対処 • 詳細は割愛 Everything you need to know about Java Classloaders NoClassDefFoundError NoSuchMethodError 等
  60. 60. 60Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Clinton Gormley • Elasticsearch の動作とスケールアウトの仕組み • 詳細は割愛 Scaling real time search and analytics with Elasticsearch
  61. 61. 61Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Marten Deinum • モノリシックな古いSpringアプリケーションをリ ファクタリングするデモ • Spring 2.0.8 → 3.2.13へのアップグレード • SimpleFormControllerへの置き換え • テストケースを書く • サービスを機能で分割し,パッケージも分ける • Eventを使って結合を疎に • 分割したサービスを独立したアプリケーションに • Bootを使う • Controllerをリファクタリング • @Controllerと@RequestMappingに書き換える Improving your (legacy) Application with Spring
  62. 62. 62Copyright©2015 NTT corp. All Rights Reserved. • 講演者:Marten Deinum • モノリシックな古いSpringアプリケーションをリ ファクタリングするデモ • Spring 2.0.8 → 3.2.13へのアップグレード • SimpleFormControllerへの置き換え • テストケースを書く • サービスを機能で分割し,パッケージも分ける • Eventを使って結合を疎に • 分割したサービスを独立したアプリケーションに • Bootを使う • Controllerをリファクタリング • @Controllerと@RequestMappingに書き換える Improving your (legacy) Application with Spring 密結合,大規模 → 疎結合,小規模 適切な手順を踏めばアップグレードは怖くない!
  63. 63. 63Copyright©2015 NTT corp. All Rights Reserved. http://www.springio.net リファレンス スライドへのリンク

×