狠狠撸

狠狠撸Share a Scribd company logo
Copyright?2015 NTT corp. All Rights Reserved.
Spring I/O 2015 報告
2015年6月22日 @ Spring I/O 2015 報告会
岩塚 卓弥
ソフトウェア革新技術プロジェクト
NTT ソフトウェアイノベーションセンタ
2Copyright?2015 NTT corp. All Rights Reserved.
? 名前:岩塚 卓弥
? 所属:NTT ソフトウェアイノベーションセンタ
? 研究分野:ソフトウェア工学
? ソフトウェア開発の生産性向上を目指す取り組みの一つとし
て、APフレームワークの整備に取り組む
? その他:
? 名古屋出身
? プログラミング言語/ソフトウェアの形式的検証技術
に関心
? Spring については newbie なのでお手柔らかに!
自己紹介
3Copyright?2015 NTT corp. All Rights Reserved.
Spring 編
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
5Copyright?2015 NTT corp. All Rights Reserved.
WEB の改善
SPRING 4.2編
6Copyright?2015 NTT corp. All Rights Reserved.
?HTTPストリーミング と SSE
?CompletableFuture のサポート
?CORS のビルトインサポート
?HTTPキャッシュの改善
?JavaScript View テンプレート
Webの改善
7Copyright?2015 NTT corp. All Rights Reserved.
? カスタム@RequestMapping
? Request Mapping の実行時制御
? RequestBodyAdvice
? @ExceptionHandler の引数に
HandlerMethod
? HttpHeaders の Byte-range リクエストのサポート
? UriTemplateHandler
? MvcUriComponentsBuilder の改善
Webの改善
8Copyright?2015 NTT corp. All Rights Reserved.
HTTPストリーミング と SSE
Web の改善
9Copyright?2015 NTT corp. All Rights Reserved.
HTTPストリーミング と SSE
サーバからクライアントにイベントをPUSH
HTTPリクエスト:イベント が 1:多
10Copyright?2015 NTT corp. All Rights Reserved.
HTTPストリーミング と SSE
サーバからクライアントにイベントをPUSH
HTTPリクエスト:イベント が 1:多
HTTPリクエスト
11Copyright?2015 NTT corp. All Rights Reserved.
HTTPストリーミング と SSE
サーバからクライアントにイベントをPUSH
HTTPリクエスト:イベント が 1:多
HTTPリクエスト
HTTPレスポンス
12Copyright?2015 NTT corp. All Rights Reserved.
HTTPストリーミング と SSE
サーバからクライアントにイベントをPUSH
HTTPリクエスト:イベント が 1:多
HTTPリクエスト
PUSH(Event1)
Event1
HTTPレスポンス
13Copyright?2015 NTT corp. All Rights Reserved.
HTTPストリーミング と SSE
サーバからクライアントにイベントをPUSH
HTTPリクエスト:イベント が 1:多
HTTPリクエスト
Event1
Event2
PUSH(Event2)
HTTPレスポンス
14Copyright?2015 NTT corp. All Rights Reserved.
HTTPストリーミング と SSE
サーバからクライアントにイベントをPUSH
HTTPリクエスト:イベント が 1:多
…
HTTPリクエスト
Event1
Event2
…
HTTPレスポンス
15Copyright?2015 NTT corp. All Rights Reserved.
HTTPストリーミング の使い方
ResponseBodyEmitter を作成
イベントをPUSH
何度もPUSH
やめる
作成した emitter を返す
その後、別のスレッドで…
16Copyright?2015 NTT corp. All Rights Reserved.
? SSE(Server-Sent Events)
? W3C勧告
? PUSHされるイベントのフォーマットが定められている
SSE の使い方
ResponseBodyEmitter の代わりに
SseEmitter を作成
SSEのフォーマットイベントをPUSH
17Copyright?2015 NTT corp. All Rights Reserved.
? IEはSSE未対応
? 以下のような用途には向かない
? オンラインゲーム
? コレボレーションツール
? 金融アプリケーション
注意点
これらの場合にはWebSocketの使用を検討
18Copyright?2015 NTT corp. All Rights Reserved.
CompletableFuture のサポート
Web の改善
19Copyright?2015 NTT corp. All Rights Reserved.
Java8で導入された非同期処理用のクラス
豊富な機能を持つ
? コールバック指定
? タイムアウトの設定
? 実行の中断
? 複数の並行処理の同期 等
CompletableFuture
20Copyright?2015 NTT corp. All Rights Reserved.
DeferredResult と CompletableFuture
DeferredResult CompletableFuture
isSetOrExpired isDone
onCompletion whenComplete
onTimeout exceptionally
setResult complete
setErrorResult completeExceptionally
DeferredReslut でできることは
だいたいCompletableFutureでもできる
21Copyright?2015 NTT corp. All Rights Reserved.
リクエストに対して非同期処理の結果を返す
Before DeferredResultを返す
その後、別のスレッドで…
22Copyright?2015 NTT corp. All Rights Reserved.
リクエストに対して非同期処理の結果を返す
After CompletableFutureを返す
その後、別のスレッドで…
23Copyright?2015 NTT corp. All Rights Reserved.
CORSのビルトインサポート
Web の改善
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
選別する
25Copyright?2015 NTT corp. All Rights Reserved.
CORSのサポート
@CrossOrigin
After
Before サードパーティのライブラリ等を利用
@CrossOrigin でクラス/メソッド単位に設定
例:CORS Filter(http://software.dzhuvinov.com)
web.xml で一括フィルタリング
26Copyright?2015 NTT corp. All Rights Reserved.
? JavaConfig
? XML
一括でフィルタリングしたいとき
CorsRegistory にマッピングを追加
mvc:cors にマッピングを追加
27Copyright?2015 NTT corp. All Rights Reserved.
HTTPキャッシュの改善
Web の改善
28Copyright?2015 NTT corp. All Rights Reserved.
Cache-Control ヘッダ
HTTPレスポンスのヘッダでコンテンツの
キャッシュの扱いを指定する
Cache-Control: no-store
例:
キャッシュしない
Cache-Control: max-age=3600, private
キャッシュしたレスポンスは3600秒間有効
キャッシュを他のユーザと共有しない
29Copyright?2015 NTT corp. All Rights Reserved.
Cache-Control の設定方法
Before WebContentInterceptor に設定
After 新しく追加された CacheControl ビルダを利用
プロパティをチェイン
30Copyright?2015 NTT corp. All Rights Reserved.
JavaScript View テンプレート
Web の改善
31Copyright?2015 NTT corp. All Rights Reserved.
JavaScript View テンプレート
JavaScriptのテンプレートエンジンをサーバ側で実行
1. 初期ページ読み込み速度の改善
→ 特にリソースの限られたモバイル環境で影響大
2. クライアント/サーバ のコード共通化
→ 最近流行りの Isomorphic JavaScript
3. SEO対策
→ JavaScriptを解釈しないロボットでも
コンテンツを取得できる
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 テンプレート
33Copyright?2015 NTT corp. All Rights Reserved.
? Controller
? テンプレート(Handlebars)
使い方
コンテンツの設定
“Page Title”に置換される
34Copyright?2015 NTT corp. All Rights Reserved.
Configの書き方
ScriptTemplateViewResolver
ScriptTemplateConfigurer
JRuby, Jythonも
(JSR223)
35Copyright?2015 NTT corp. All Rights Reserved.
WEBSOCKETメッセージング
の改善
SPRING 4.2編
36Copyright?2015 NTT corp. All Rights Reserved.
? メッセージに対する@JsonViewのサポート
? 接続ユーザ情報の取得
? サーバをまたがるUser Destinationの解決
? StompSubProtocolErrorHandler
? グローバルな@MessageExceptionHandler
? SimpleBrokerMessageHandler の改善
WebSocketメッセージングの改善
37Copyright?2015 NTT corp. All Rights Reserved.
? STOMPクライアント over TCP/WebSocket
? @SendTo, @SendToUser の改善
? 戻り値に ListenableFuture/CompletableFuture
? XMLペイロードのメッセージ/オブジェクト変換
WebSocketメッセージングの改善
38Copyright?2015 NTT corp. All Rights Reserved.
メッセージに対する
@JsonViewのサポート
WebSocketメッセージング の改善
39Copyright?2015 NTT corp. All Rights Reserved.
? @MessageMapping と @SubscribeMapping の
メソッドの戻り値に@JsonView が使用可能に
? 今までは@ResponseBody でしか使えなかった
→ Webの機能への追従が進む
メッセージに対する@JsonViewのサポート
グループの指定
グループの指定
@JsonView(≧4.1)のおさらい
40Copyright?2015 NTT corp. All Rights Reserved.
テストの改善
SPRING 4.2編
41Copyright?2015 NTT corp. All Rights Reserved.
? SpringJUnit4ClassRunner からRuleへの置き換え
? ContextCache
? TestContext 周りの改善
? ReflectionTestUtils のstaticフィールドアクセス
? @DirtiesContext の改善
? 組み込みDBの名前周りの改善
? AopTestUtils によるProxyのターゲットの取得
テストの改善
42Copyright?2015 NTT corp. All Rights Reserved.
SpringJUnit4ClassRunner か
らRuleへの置き換え
テストの改善
43Copyright?2015 NTT corp. All Rights Reserved.
? Springの機能をJUnitのテストケース内で使用できる
ようにするテストランナー
? テストケース内でDIしたいときなどに用いる
SpringJUnit4ClassRunner
テストランナーはひとつしか指定できない
44Copyright?2015 NTT corp. All Rights Reserved.
別のテストランナーと併用したいとき
Before @BeforeメソッドでTestContextManagerを作成
任意のテストランナー
TestContextManager
45Copyright?2015 NTT corp. All Rights Reserved.
別のテストランナーと併用したいとき
After @Ruleと@ClassRuleを使う
必ず二つとも記述すること
任意のテストランナー
46Copyright?2015 NTT corp. All Rights Reserved.
セッション紹介編
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 その他
紹介セッション一覧
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
49Copyright?2015 NTT corp. All Rights Reserved.
? 講演者:Dave Syer
? マイクロサービスの協調動作のためのボイラープレート
に Spring Cloud × Netflix OSS を利用
? 設定の管理
? サービス探索
? ロードバランサ
? 耐障害性
? …
Building Microservices with Spring Cloud and
Netflix OSS
50Copyright?2015 NTT corp. All Rights Reserved.
? 講演者:Dave Syer
? マイクロサービスの協調動作のためのボイラープレート
に Spring Cloud × Netflix OSS を利用
Building Microservices with Spring Cloud and
Netflix OSS
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/
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
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
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
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
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
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
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
とにかく沢山紹介
59Copyright?2015 NTT corp. All Rights Reserved.
? 講演者:Oleg Selajev
? クラスローダの基本動作とエラー発生時の対処
? 詳細は割愛
Everything you need to know about Java
Classloaders
NoClassDefFoundError
NoSuchMethodError 等
60Copyright?2015 NTT corp. All Rights Reserved.
? 講演者:Clinton Gormley
? Elasticsearch の動作とスケールアウトの仕組み
? 詳細は割愛
Scaling real time search and analytics with
Elasticsearch
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
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
密結合,大規模 → 疎結合,小規模
適切な手順を踏めばアップグレードは怖くない!
63Copyright?2015 NTT corp. All Rights Reserved.
http://www.springio.net
リファレンス
スライドへのリンク

More Related Content

Spring I/O 2015 報告

  • 1. Copyright?2015 NTT corp. All Rights Reserved. Spring I/O 2015 報告 2015年6月22日 @ Spring I/O 2015 報告会 岩塚 卓弥 ソフトウェア革新技術プロジェクト NTT ソフトウェアイノベーションセンタ
  • 2. 2Copyright?2015 NTT corp. All Rights Reserved. ? 名前:岩塚 卓弥 ? 所属:NTT ソフトウェアイノベーションセンタ ? 研究分野:ソフトウェア工学 ? ソフトウェア開発の生産性向上を目指す取り組みの一つとし て、APフレームワークの整備に取り組む ? その他: ? 名古屋出身 ? プログラミング言語/ソフトウェアの形式的検証技術 に関心 ? Spring については newbie なのでお手柔らかに! 自己紹介
  • 3. 3Copyright?2015 NTT corp. All Rights Reserved. Spring 編
  • 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. 5Copyright?2015 NTT corp. All Rights Reserved. WEB の改善 SPRING 4.2編
  • 6. 6Copyright?2015 NTT corp. All Rights Reserved. ?HTTPストリーミング と SSE ?CompletableFuture のサポート ?CORS のビルトインサポート ?HTTPキャッシュの改善 ?JavaScript View テンプレート Webの改善
  • 7. 7Copyright?2015 NTT corp. All Rights Reserved. ? カスタム@RequestMapping ? Request Mapping の実行時制御 ? RequestBodyAdvice ? @ExceptionHandler の引数に HandlerMethod ? HttpHeaders の Byte-range リクエストのサポート ? UriTemplateHandler ? MvcUriComponentsBuilder の改善 Webの改善
  • 8. 8Copyright?2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE Web の改善
  • 9. 9Copyright?2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多
  • 10. 10Copyright?2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多 HTTPリクエスト
  • 11. 11Copyright?2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多 HTTPリクエスト HTTPレスポンス
  • 12. 12Copyright?2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多 HTTPリクエスト PUSH(Event1) Event1 HTTPレスポンス
  • 13. 13Copyright?2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多 HTTPリクエスト Event1 Event2 PUSH(Event2) HTTPレスポンス
  • 14. 14Copyright?2015 NTT corp. All Rights Reserved. HTTPストリーミング と SSE サーバからクライアントにイベントをPUSH HTTPリクエスト:イベント が 1:多 … HTTPリクエスト Event1 Event2 … HTTPレスポンス
  • 15. 15Copyright?2015 NTT corp. All Rights Reserved. HTTPストリーミング の使い方 ResponseBodyEmitter を作成 イベントをPUSH 何度もPUSH やめる 作成した emitter を返す その後、別のスレッドで…
  • 16. 16Copyright?2015 NTT corp. All Rights Reserved. ? SSE(Server-Sent Events) ? W3C勧告 ? PUSHされるイベントのフォーマットが定められている SSE の使い方 ResponseBodyEmitter の代わりに SseEmitter を作成 SSEのフォーマットイベントをPUSH
  • 17. 17Copyright?2015 NTT corp. All Rights Reserved. ? IEはSSE未対応 ? 以下のような用途には向かない ? オンラインゲーム ? コレボレーションツール ? 金融アプリケーション 注意点 これらの場合にはWebSocketの使用を検討
  • 18. 18Copyright?2015 NTT corp. All Rights Reserved. CompletableFuture のサポート Web の改善
  • 19. 19Copyright?2015 NTT corp. All Rights Reserved. Java8で導入された非同期処理用のクラス 豊富な機能を持つ ? コールバック指定 ? タイムアウトの設定 ? 実行の中断 ? 複数の並行処理の同期 等 CompletableFuture
  • 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. 21Copyright?2015 NTT corp. All Rights Reserved. リクエストに対して非同期処理の結果を返す Before DeferredResultを返す その後、別のスレッドで…
  • 22. 22Copyright?2015 NTT corp. All Rights Reserved. リクエストに対して非同期処理の結果を返す After CompletableFutureを返す その後、別のスレッドで…
  • 23. 23Copyright?2015 NTT corp. All Rights Reserved. CORSのビルトインサポート Web の改善
  • 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. 25Copyright?2015 NTT corp. All Rights Reserved. CORSのサポート @CrossOrigin After Before サードパーティのライブラリ等を利用 @CrossOrigin でクラス/メソッド単位に設定 例:CORS Filter(http://software.dzhuvinov.com) web.xml で一括フィルタリング
  • 26. 26Copyright?2015 NTT corp. All Rights Reserved. ? JavaConfig ? XML 一括でフィルタリングしたいとき CorsRegistory にマッピングを追加 mvc:cors にマッピングを追加
  • 27. 27Copyright?2015 NTT corp. All Rights Reserved. HTTPキャッシュの改善 Web の改善
  • 28. 28Copyright?2015 NTT corp. All Rights Reserved. Cache-Control ヘッダ HTTPレスポンスのヘッダでコンテンツの キャッシュの扱いを指定する Cache-Control: no-store 例: キャッシュしない Cache-Control: max-age=3600, private キャッシュしたレスポンスは3600秒間有効 キャッシュを他のユーザと共有しない
  • 29. 29Copyright?2015 NTT corp. All Rights Reserved. Cache-Control の設定方法 Before WebContentInterceptor に設定 After 新しく追加された CacheControl ビルダを利用 プロパティをチェイン
  • 30. 30Copyright?2015 NTT corp. All Rights Reserved. JavaScript View テンプレート Web の改善
  • 31. 31Copyright?2015 NTT corp. All Rights Reserved. JavaScript View テンプレート JavaScriptのテンプレートエンジンをサーバ側で実行 1. 初期ページ読み込み速度の改善 → 特にリソースの限られたモバイル環境で影響大 2. クライアント/サーバ のコード共通化 → 最近流行りの Isomorphic JavaScript 3. SEO対策 → JavaScriptを解釈しないロボットでも コンテンツを取得できる
  • 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. 33Copyright?2015 NTT corp. All Rights Reserved. ? Controller ? テンプレート(Handlebars) 使い方 コンテンツの設定 “Page Title”に置換される
  • 34. 34Copyright?2015 NTT corp. All Rights Reserved. Configの書き方 ScriptTemplateViewResolver ScriptTemplateConfigurer JRuby, Jythonも (JSR223)
  • 35. 35Copyright?2015 NTT corp. All Rights Reserved. WEBSOCKETメッセージング の改善 SPRING 4.2編
  • 36. 36Copyright?2015 NTT corp. All Rights Reserved. ? メッセージに対する@JsonViewのサポート ? 接続ユーザ情報の取得 ? サーバをまたがるUser Destinationの解決 ? StompSubProtocolErrorHandler ? グローバルな@MessageExceptionHandler ? SimpleBrokerMessageHandler の改善 WebSocketメッセージングの改善
  • 37. 37Copyright?2015 NTT corp. All Rights Reserved. ? STOMPクライアント over TCP/WebSocket ? @SendTo, @SendToUser の改善 ? 戻り値に ListenableFuture/CompletableFuture ? XMLペイロードのメッセージ/オブジェクト変換 WebSocketメッセージングの改善
  • 38. 38Copyright?2015 NTT corp. All Rights Reserved. メッセージに対する @JsonViewのサポート WebSocketメッセージング の改善
  • 39. 39Copyright?2015 NTT corp. All Rights Reserved. ? @MessageMapping と @SubscribeMapping の メソッドの戻り値に@JsonView が使用可能に ? 今までは@ResponseBody でしか使えなかった → Webの機能への追従が進む メッセージに対する@JsonViewのサポート グループの指定 グループの指定 @JsonView(≧4.1)のおさらい
  • 40. 40Copyright?2015 NTT corp. All Rights Reserved. テストの改善 SPRING 4.2編
  • 41. 41Copyright?2015 NTT corp. All Rights Reserved. ? SpringJUnit4ClassRunner からRuleへの置き換え ? ContextCache ? TestContext 周りの改善 ? ReflectionTestUtils のstaticフィールドアクセス ? @DirtiesContext の改善 ? 組み込みDBの名前周りの改善 ? AopTestUtils によるProxyのターゲットの取得 テストの改善
  • 42. 42Copyright?2015 NTT corp. All Rights Reserved. SpringJUnit4ClassRunner か らRuleへの置き換え テストの改善
  • 43. 43Copyright?2015 NTT corp. All Rights Reserved. ? Springの機能をJUnitのテストケース内で使用できる ようにするテストランナー ? テストケース内でDIしたいときなどに用いる SpringJUnit4ClassRunner テストランナーはひとつしか指定できない
  • 44. 44Copyright?2015 NTT corp. All Rights Reserved. 別のテストランナーと併用したいとき Before @BeforeメソッドでTestContextManagerを作成 任意のテストランナー TestContextManager
  • 45. 45Copyright?2015 NTT corp. All Rights Reserved. 別のテストランナーと併用したいとき After @Ruleと@ClassRuleを使う 必ず二つとも記述すること 任意のテストランナー
  • 46. 46Copyright?2015 NTT corp. All Rights Reserved. セッション紹介編
  • 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. 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. 49Copyright?2015 NTT corp. All Rights Reserved. ? 講演者:Dave Syer ? マイクロサービスの協調動作のためのボイラープレート に Spring Cloud × Netflix OSS を利用 ? 設定の管理 ? サービス探索 ? ロードバランサ ? 耐障害性 ? … Building Microservices with Spring Cloud and Netflix OSS
  • 50. 50Copyright?2015 NTT corp. All Rights Reserved. ? 講演者:Dave Syer ? マイクロサービスの協調動作のためのボイラープレート に Spring Cloud × Netflix OSS を利用 Building Microservices with Spring Cloud and Netflix OSS
  • 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. 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. 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. 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. 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. 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. 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. 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. 59Copyright?2015 NTT corp. All Rights Reserved. ? 講演者:Oleg Selajev ? クラスローダの基本動作とエラー発生時の対処 ? 詳細は割愛 Everything you need to know about Java Classloaders NoClassDefFoundError NoSuchMethodError 等
  • 60. 60Copyright?2015 NTT corp. All Rights Reserved. ? 講演者:Clinton Gormley ? Elasticsearch の動作とスケールアウトの仕組み ? 詳細は割愛 Scaling real time search and analytics with Elasticsearch
  • 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. 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. 63Copyright?2015 NTT corp. All Rights Reserved. http://www.springio.net リファレンス スライドへのリンク