Submit Search
Upload
大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
•
1 like
•
979 views
A
apkiban
Follow
SpringSummer2015の講演資料です。脆弱性対応のノウハウとしてお役立てください。
Read less
Read more
Software
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 92
Download now
Download to read offline
Recommended
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
apkiban
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
apkiban
Spring Integration 超入門
Spring Integration 超入門
Yasutaka Sugamura
新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは
apkiban
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
NTT DATA Technology & Innovation
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
バッチは地味だが役に立つ
バッチは地味だが役に立つ
apkiban
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
Recommended
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
apkiban
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
apkiban
Spring Integration 超入門
Spring Integration 超入門
Yasutaka Sugamura
新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは
apkiban
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
NTT DATA Technology & Innovation
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
バッチは地味だが役に立つ
バッチは地味だが役に立つ
apkiban
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
Spring integration概要
Spring integration概要
kuroiwa
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
NTT DATA Technology & Innovation
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
歩 柴田
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
Tomoya Hibi
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
AdvancedTechNight
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
NTT DATA Technology & Innovation
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
NTT DATA Technology & Innovation
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTT DATA Technology & Innovation
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
apkiban
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
NTT DATA Technology & Innovation
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
日本Javaユーザーグループ
CLOUDIAN at Support Engineer Night
CLOUDIAN at Support Engineer Night
CLOUDIAN KK
More Related Content
What's hot
Spring integration概要
Spring integration概要
kuroiwa
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
NTT DATA Technology & Innovation
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
歩 柴田
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
Tomoya Hibi
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
AdvancedTechNight
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
Go Miyasaka
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
NTT DATA Technology & Innovation
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
NTT DATA Technology & Innovation
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
NTT DATA Technology & Innovation
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTT DATA Technology & Innovation
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
apkiban
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
NTT DATA Technology & Innovation
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
NTT DATA Technology & Innovation
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
NTT DATA Technology & Innovation
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
What's hot
(20)
Spring integration概要
Spring integration概要
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Similar to 大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
日本Javaユーザーグループ
CLOUDIAN at Support Engineer Night
CLOUDIAN at Support Engineer Night
CLOUDIAN KK
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
de:code 2017
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
apkiban
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Yuichi Hasegawa
実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン
Kuniteru Asami
UShareSoft_20130425
UShareSoft_20130425
Satoru Watanabe
UShareSoft_20130425
UShareSoft_20130425
Satoru Watanabe
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
Hinemos
App controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウド
Takashi Kanai
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
Yuya Yamaki
インフラチームとCCoEの関係.pptx
インフラチームとCCoEの関係.pptx
ssuser5c7ee4
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
GoAzure
Go azure tfs_service
Go azure tfs_service
Kaoru NAKAMURA
Developer Summit_20140214
Developer Summit_20140214
samemoon
Visual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使う
Takeshi Fukuhara
Springon cloudfoundry
Springon cloudfoundry
Toshihiko Ikeda
Visual Studio 2010
Visual Studio 2010
Visual Studio Users Group Japan
俺とHashiCorp
俺とHashiCorp
Toru Makabe
Azure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュ
Yasuaki Matsuda
Similar to 大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
(20)
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
CLOUDIAN at Support Engineer Night
CLOUDIAN at Support Engineer Night
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン
UShareSoft_20130425
UShareSoft_20130425
UShareSoft_20130425
UShareSoft_20130425
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
App controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウド
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
インフラチームとCCoEの関係.pptx
インフラチームとCCoEの関係.pptx
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
Go azure tfs_service
Go azure tfs_service
Developer Summit_20140214
Developer Summit_20140214
Visual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使う
Springon cloudfoundry
Springon cloudfoundry
Visual Studio 2010
Visual Studio 2010
俺とHashiCorp
俺とHashiCorp
Azure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュ
More from apkiban
What happens in Spring Cloud Netflix
What happens in Spring Cloud Netflix
apkiban
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
apkiban
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
apkiban
TERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO Platform
apkiban
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
apkiban
Spring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わる
apkiban
More from apkiban
(6)
What happens in Spring Cloud Netflix
What happens in Spring Cloud Netflix
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
TERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO Platform
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
Spring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わる
大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
1.
Copyright © 2015
NTT DATA Corporation 2015-08-28 池谷 智行@JSUG Spring in Summer 2015 大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用
2.
Copyright © 2015
NTT DATA Corporation 2 自己紹介 池谷 智行 • TERASOLUNA Frameworkの整備、展開 • Spring Frameworkの実務経験 • Core/MVC/Security/Data/Batch
3.
Copyright © 2015
NTT DATA Corporation 3 Agenda • TERASOLUNA Frameworkとは? • Spring Frameworkを利用した時の課題 • TERASOLUNA Frameworkにおける課題の解決方法 • SpringへのContribution • Q&A
4.
Copyright © 2015
NTT DATA Corporation 4 TERASOLUNA Framework とは?
5.
5Copyright © 2015
NTT DATA Corporation TERASOLUNAとは? Process Environment Support 数多くのシステム開発で 培ったノウハウを盛り込んだ 標準開発手順・管理手順 ソフトウェアを開発する際の 雛形になるフレームワーク と開発を支援するツール 蓄積されたノウハウ を展開するための 研修や教育サービス 標準手順 サポート 開発環境 TERASOLUNAは、 NTTデータのシステム開発を支えるオープン系システム開発の ための総合ソリューションです。数多くのシステム開発実績をもとにした 「標準手順」「開発環境」「サポート」をトータルで提供しており、TERASOLUNAを 活用することで、高品質なシステム開発が実現できます。 TERASOLUNA Framework
6.
6Copyright © 2015
NTT DATA Corporation これまでのTERASOLUNA FWとは? Spring 独自のフレームワーク層 Enterprise Application Application Server http://www.terasoluna.jp/ Spring 1 (2004-) 2 (2007-) 3 (2012-) ビジネスロジックを 実装することに 注力できる TERASOLUNA Frameworkは2004 にリリースされ、 当社のJava開発の大半で使用されている Struts1 iBATIS ※これまでのTERASOLUNA Frameworkは、今後もサポートを継続していきます
7.
7Copyright © 2015
NTT DATA Corporation Strus1のEOL & 脆弱性 http://www.ipa.go.jp/security/ciadr/vul/20140417-struts.html 2014-04 ClassLoader Manipulation脆弱性 CVE-2014-0114 2014年 Struts1に脆弱性が発見・報道されたが EOLのため開発元からのパッチは提供されなかった 2015-03 Multi Page Validator脆弱性 CVE-2015-0899 http://sourceforge.jp/projects/terasoluna/wiki/StrutsPatch1-JP http://sourceforge.jp/projects/terasoluna/wiki/StrutsPatch2-JP 当社がパッチ作成・公開 当社が報告
8.
8Copyright © 2015
NTT DATA Corporation Strus1のEOL & 脆弱性 http://www.ipa.go.jp/security/ciadr/vul/20140417-struts.html 2014-04 ClassLoader Manipulation脆弱性 CVE-2014-0114 2014年 Struts1に脆弱性が発見・報道されたが EOLのため開発元からのパッチは提供されなかった 2015-03 Multi Page Validator脆弱性 CVE-2015-0899 http://sourceforge.jp/projects/terasoluna/wiki/StrutsPatch1-JP http://sourceforge.jp/projects/terasoluna/wiki/StrutsPatch2-JP 当社がパッチ作成・公開 当社が報告 本脆弱性は新聞等でも取り上げられ、 EOLしたStruts1を継続利用している ことを不安視するユーザが増加
9.
9Copyright © 2015
NTT DATA Corporation 新たなTERASOLUNA FWとは? 業界の動向を考慮し構成要素を見直した 新しいフレームワークの提供を開始※ Spring Enterprise Application Application Server Spring MVC Springを そのまま使用 Spring Data JPA Spring Security http://terasoluna.org 以降は新しい TERASOLUNA FWのご紹介を していきます ※脆弱性発見以前より 新たなフレームワークの開発を着手し整備していた
10.
Copyright © 2015
NTT DATA Corporation 10 2000年頃 2015年頃 FW自体に 付加価値 FWが コモディティ化 Java FWが 多数乱立 Java FWは SpringかJava EEの2強 業 界 動 向 当 社 の 取 組 独自FWとして整備 OSS(Spring)を そのまま活用 これまでのTERASOLUNA (TERASOLUNA Server FW for Java 2) 新たなTERASOLUNA (TERASOLUNA Server FW for Java 5) エンタープライズ適用に 必要なサポートを提供 サポート提供と合わせて エンタープライズ適用に 必要なガイドラインの充実 これまでのTERASOLUNA FWとの違い
11.
Copyright © 2015
NTT DATA Corporation 11 Springは機能追加し続けており、 今後も迅速な新規テクノロジーへの追従が期待できる Java EEは仕様策定からAPサーバベンダの実装までに 時間がかかるため、変化の追従に時間を要する 当社ではSpringを10年以上活用しており、社内に 適用実績、開発リソース、開発ノウハウが多く 存在している 適用案件や開発者が多く、 セキュリティ面の改善活動が活発に実施されている Spring Security等のセキュリティ対策OSSの採用により、 セキュリティ面への対応を強化できる グローバル市場でのシェアNo.1であり、技術者や情報が 豊富に存在するため、要因確保や書籍などによる 情報収集がしやすい 開発 リソースの 確保 しやすさ 世の中の 変化への 対応 セキュリ ティ面の 強化 社内に 蓄積した ノウハウ量 Spring なぜSpringなのか?
12.
12Copyright © 2015
NTT DATA Corporation TERASOLUNA FWの構成要素 •Spring, MyBatisなどのOSSフレームワークソフトウェアフレームワーク •エンタープライズ向けに必要な汎用的な部品共通ライブラリ •OSSを利用したエンタープライズ向け アプリ開発におけるベストプラクティスドキュメントガイドライン •基本的な開発方法を学ぶ学習教材チュートリアル •基本的な機能を実装したサンプル・アプリケーションサンプルAP •プロジェクト構成のひな形ブランクプロジェクト •機能毎のE2Eテスト自動実行基盤、負荷性能テスト シナリオE2E/性能テストスイート
13.
13Copyright © 2015
NTT DATA Corporation TERASOLUNA FWの構成要素 •Spring, MyBatisなどのOSSフレームワークソフトウェアフレームワーク •エンタープライズ向けに必要な汎用的な部品共通ライブラリ •OSSを利用したエンタープライズ向け アプリ開発におけるベストプラクティスドキュメントガイドライン •基本的な開発方法を学ぶ学習教材チュートリアル •基本的な機能を実装したサンプル・アプリケーションサンプルAP •プロジェクト構成のひな形ブランクプロジェクト •機能毎のE2Eテスト自動実行基盤、負荷性能テスト シナリオE2E/性能テストスイート GitHubで公開しています http://terasoluna.org
14.
14Copyright © 2015
NTT DATA Corporation TERASOLUNA FWのソフトウェアスタック
15.
Copyright © 2015
NTT DATA Corporation 15 TERASOLUNA FWの変遷 TERASOLUNA Server FW for Java(Web)1.X TERASOLUNA Server FW for Java 5.X 2013年 Strutsベースの独自FW Struts+Springベースの独自FW Spring MVC3.2ベース Spring MVCベース 国内向け(Web版) 海外ローカル向け 国内向け(Rich版) 旧式Spring MVCベースの独自FW 2004年 2007年2006年 国内外向け 2015年 新しいTERASOLUNA FW(5.X)は TERASOLUNA Global FWをベースとしている Global FWがベース TERASOLUNA Server FW for Java(Rich)1.X TERASOLUNA Global FW 1.X TERASOLUNA Server FW for Java(Web)2.X TERASOLUNA Server FW for Java(Rich)2.X
16.
Copyright © 2015
NTT DATA Corporation 16 Spring Frameworkを利用 した時の課題
17.
17Copyright © 2015
NTT DATA Corporation エンタープライズシステム開発での課題 Springのバージョン組合せ選定 不完全な 例外ハンドリング・ロギング 乱雑なプロジェクト構成 フレームワークの長期利用 大規模・長期保守なエンタープライズシステム開発 でソフトウェアアーキテクトが直面する課題 効率性 移植性 信頼性 保守性 信頼性の低いコードの模倣 Spring等の膨大な設定
18.
18Copyright © 2015
NTT DATA Corporation エンタープライズシステム開発での課題 Springのバージョン組合せ選定 不完全な 例外ハンドリング・ロギング 乱雑なプロジェクト構成 信頼性の低いコードの模倣 ソフトウェアフレームワーク 共通ライブラリ ガイドライン チュートリアル サンプルAP ブランクプロジェクト フレームワークの長期利用 E2E/性能テストスイート Spring等の膨大な設定 各構成要素で補い合うことにより課題をカバー
19.
19Copyright © 2015
NTT DATA Corporation エンタープライズシステム開発での課題 Springのバージョン組合せ選定 不完全な 例外ハンドリング・ロギング 乱雑なプロジェクト構成 信頼性の低いコードの模倣 ソフトウェアフレームワーク 共通ライブラリ ガイドライン チュートリアル サンプルAP ブランクプロジェクト フレームワークの長期利用 E2E/性能テストスイート Spring等の膨大な設定 各構成要素で補い合うことにより課題をカバー 課題の詳細と TERASOLUNA FWでの 解決アプローチを これから紹介します
20.
Copyright © 2015
NTT DATA Corporation 20 課題の詳細と 解決アプローチ
21.
21Copyright © 2015
NTT DATA Corporation エンタープライズシステム開発での課題 Springのバージョン組合せ選定 不完全な 例外ハンドリング・ロギング 乱雑なプロジェクト構成 信頼性の低いコードの模倣 フレームワークの長期利用 Spring等の膨大な設定
22.
Copyright © 2015
NTT DATA Corporation 22 Springのバージョン組合せ選定 TERASOLUNA Server FW for Java(Web)1.X TERASOLUNA Server FW for Java 5.X 2013年 Strutsベースの独自FW Struts+Springベースの独自FW Spring MVC3.2ベース Spring MVCベース 国内向け(Web版) 海外ローカル向け 国内向け(Rich版) 旧式Spring MVCベースの独自FW 2004年 2007年2006年 国内外向け 2015年 2013年にリリースしたGlobal FWで直面した課題 Global FWがベース TERASOLUNA Server FW for Java(Rich)1.X TERASOLUNA Global FW 1.X TERASOLUNA Server FW for Java(Web)2.X TERASOLUNA Server FW for Java(Rich)2.X
23.
23Copyright © 2015
NTT DATA Corporation Global FWのソフトウェアスタック
24.
24Copyright © 2015
NTT DATA Corporation Global FWのソフトウェアスタック 各Springサブプロジェクトの どのバージョンを使用すべきか? 3rd-partyライブラリは どのバージョンを使用すべきか?
25.
25Copyright © 2015
NTT DATA Corporation Global FWのソフトウェアスタック 各Springサブプロジェクトの どのバージョンを使用すべきか? 3rd-partyライブラリは どのバージョンを使用すべきか? Global FWではバージョンの 組合せの選定を独自に行うことで カバーしていた
26.
Copyright © 2015
NTT DATA Corporation 26 TERASOLUNA FWでの解決方法 TERASOLUNA Server FW for Java(Web)1.X TERASOLUNA Server FW for Java 5.X 2013年 Strutsベースの独自FW Struts+Springベースの独自FW Spring MVC3.2ベース Spring MVCベース 国内向け(Web版) 海外ローカル向け 国内向け(Rich版) 旧式Spring MVCベースの独自FW 2004年 2007年2006年 国内外向け 2015年 Global FWから2年が経過したTERASOLUNA FWでは どのように解決したか? Global FWがベース TERASOLUNA Server FW for Java(Rich)1.X TERASOLUNA Global FW 1.X TERASOLUNA Server FW for Java(Web)2.X TERASOLUNA Server FW for Java(Rich)2.X
27.
27Copyright © 2015
NTT DATA Corporation TERASOLUNA FWのソフトウェアスタック
28.
28Copyright © 2015
NTT DATA Corporation TERASOLUNA FWのソフトウェアスタック 2014/7にリリースされた Spring IO Platform を採用することで解決
29.
29Copyright © 2015
NTT DATA Corporation Spring IO Platformとは? https://spring.io/platform
30.
30Copyright © 2015
NTT DATA Corporation 依存関係の管理 http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions https://pivotal.io/agile/press-release/pivotal-releases-spring-io-platform
31.
31Copyright © 2015
NTT DATA Corporation 依存関係の管理 http://docs.spring.io/platform/docs/current/reference/htmlsingle/#appendix-dependency-versions https://pivotal.io/agile/press-release/pivotal-releases-spring-io-platform “With a set of components all tested to work together, it saves weeks of tedious developer efforts to build and test a stack of compatible Spring and third-party technologies, thereby helping enterprises bring new applications to market more rapidly.” Springや3rd-partyテクノロジ間の互換性の ためのテストやビルドへ費やされていた 「何週間にも及ぶ退屈でつまらない労力」 が削減される
32.
32Copyright © 2015
NTT DATA Corporation Spring IO Platformの貢献 Spring Teamが 決定し、テスト済みであるSpringや 3rd-partyライブラリの組合せを利用できる • バージョン選定・検討に対するコスト削減 • 全世界のSpring IO Platformユーザとの 情報共有が可能
33.
33Copyright © 2015
NTT DATA Corporation TERASOLUNA FWでのIO Platformの利用 io.spring.platform platform-bom org.terasoluna.gfw terasoluna-gfw-parent org.springframework.boot spring-boot-starter-parent org.springframework.boot spring-boot-dependencies アプリケーション parent parent parent import 次頁参照 TERASOLUNA FWが依存・推奨する 66ライブラリの管理をIO Platformに委譲 Spring IO Platformに含まれていない 依存・推奨3rd-partyライブラリを 追加(MyBatis/dozer等) 次々頁参照
34.
34Copyright © 2015
NTT DATA Corporation Spring IO Platformのインポート https://github.com/terasolunaorg/terasoluna-gfw/blob/master/terasoluna-gfw-parent/pom.xml <dependencyManagement> <dependencies> <dependency> <groupId>io.spring.platform</groupId> <artifactId>platform-bom</artifactId> <version>${io.spring.platform.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!-- … --> </dependencies> </dependencyManagement> terasoluna-gfw-parent/pom.xml TERASOLUNA FWの 親pom
35.
35Copyright © 2015
NTT DATA Corporation アプリケーションからの利用方法 <parent> <artifactId>terasoluna-gfw-parent</artifactId> <groupId>org.terasoluna.gfw</groupId> <version>5.0.1.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.terasoluna.gfw</groupId> <artifactId>terasoluna-gfw-web</artifactId> </dependency> <!-- ... --> </dependencies> SpringやTERASOLUNA FWが提供する 「共通ライブラリ」、3rd-partyライブラリを 必要に応じて依存関係に追加 (<version>を付けない) Spring IO Platformが提供する Springや3rd-patyライブラリの バージョン番号が引き継がれる
36.
36Copyright © 2015
NTT DATA Corporation エンタープライズシステム開発での課題 Springのバージョン組合せ選定 不完全な 例外ハンドリング・ロギング 乱雑なプロジェクト構成 信頼性の低いコードの模倣 フレームワークの長期保守 フレームワーク更新時の影響 Spring等の膨大な設定 ✓
37.
37Copyright © 2015
NTT DATA Corporation Spring等の膨大な設定 SpringベースのWebアプリケーションに必要な設定 設定ファイル 設定内容 web.xml Spring MVC/Securityや一般的なWeb設定 Spring MVC設定 URLマッピングルール/例外ハンドリング/プロパティ読込 /AOP/認証/認可/データソース定義/etc...Spring Security設定 ログ設定 出力先/出力レベル/ローリング/出力フォーマット メッセージ定義 画面出力メッセージ/ログメッセージ pom.xml ライブラリの依存関係/Mavenプラグイン設定 etc... ... 必要な設定が漏れていたり、 初期値のまま使われてしまう
38.
38Copyright © 2015
NTT DATA Corporation エンタープライズシステム開発での課題 Springのバージョン組合せ選定 不完全な 例外ハンドリング・ロギング 乱雑なプロジェクト構成 信頼性の低いコードの模倣 フレームワークの長期利用 Spring等の膨大な設定 ✓
39.
39Copyright © 2015
NTT DATA Corporation 乱雑なプロジェクト構成 よくある課題 • 複数のプロジェクトで構造の一貫性がとれて いない(行き当たりばったりで構造を設計) • コードや設定が特定の環境に依存し、 ステージング環境(テスト環境、本番環境) でのテストのしやすさが考慮されていない • 一般的なコーディング作法に反した依存関係 (ex. ServiceクラスでHttpSessionを扱う)
40.
40Copyright © 2015
NTT DATA Corporation TERASOLUNA FWでの解決方法 • レイヤ分割したマルチプロジェクト構成 • 環境依存を集約し、アプリケーションと 切り離すことが可能な構造 • エンタープライズ開発に必要な 各種設定・ライブラリ依存関係が設定済 エンタープライズ開発に必要なノウハウを 詰め込んだプロジェクト構成の雛形 「ブランクプロジェクト」を提供
41.
41Copyright © 2015
NTT DATA Corporation ブランクプロジェクト エンタープライズ開発時に必要になる設定が定義済みの ブランクプロジェクトのarchetypeを提供 環境依存する資材を集約 するプロジェクト アプリケーションレイヤの プロジェクト ドメイン・インフラレイヤの プロジェクト https://github.com/terasolunaorg/terasoluna-gfw-web-multi-blank
42.
42Copyright © 2015
NTT DATA Corporation アプリケーションのレイヤ化 Application Layer Controller Form View Domain Layer Service Domain Object Repository Infrastructure Layer O/R Mapper Repository Impl Integration System Connector depends depends Helper クラスの種類を3層に分類し、依存関係を束縛
43.
43Copyright © 2015
NTT DATA Corporation レイヤ間の依存関係の矯正 Domain Layer Application Layer 誤ったレイヤ間の依存関係を コンパイル時に(IDE赤線で)検出できる Servlet API等 への依存を 物理的に禁止
44.
44Copyright © 2015
NTT DATA Corporation ブランクプロジェクトの生成方法 mvn archetype:generate -B¥ -DarchetypeCatalog=http://repo.terasoluna.org/nexus/content/repositories/terasoluna-gfw-releases¥ -DarchetypeGroupId=org.terasoluna.gfw.blank¥ -DarchetypeArtifactId=terasoluna-gfw-multi-web-blank-mybatis3-archetype¥ -DarchetypeVersion=5.0.1.RELEASE¥ -DgroupId=com.example¥ -DartifactId=springio-demo 各ORM(MyBatis/JPA)に最適化されたarchetypeを選択できる 1terasoluna-gfw-multi-web-blank-mybatis3-archetype 2 terasoluna-gfw-multi-web-blank-jpa-archetype
45.
45Copyright © 2015
NTT DATA Corporation ブランクプロジェクトの生成方法 TERASOLUNA FWが 依存・推奨する ライブラリが定義済
46.
46Copyright © 2015
NTT DATA Corporation ブランクプロジェクトの内部構成 Domain Layer Infrastructure Layer
47.
47Copyright © 2015
NTT DATA Corporation ブランクプロジェクトの内部構成 Application Layer
48.
48Copyright © 2015
NTT DATA Corporation ブランクプロジェクトの内部構成 ログ出力設定やデータソース定義など、 ステージング環境によって異なる設定を 本プロジェクトに集約することで、 設定値の置換を容易にしている
49.
49Copyright © 2015
NTT DATA Corporation ブランクプロジェクトの実行
50.
50Copyright © 2015
NTT DATA Corporation サンプルアプリケーション Tour reservation application •MyBatis3 version • https://github.com/terasolunaorg/terasoluna-tourreservation-mybatis3 •JPA version • https://github.com/terasolunaorg/terasoluna-tourreservation ブランクプロジェクトの実用例を公開
51.
51Copyright © 2015
NTT DATA Corporation (参考)TERASOLUNA FWとは異なるアプローチ Spring Boot(2014/1~)も ライブラリ依存関係や初期設定相当 (Auto-Configuration)を提供
52.
52Copyright © 2015
NTT DATA Corporation エンタープライズシステム開発での課題 Springのバージョン組合せ選定 不完全な 例外ハンドリング・ロギング 乱雑なプロジェクト構成 信頼性の低いコードの模倣 フレームワークの長期利用 Spring等の膨大な設定 ✓ ✓ ✓
53.
53Copyright © 2015
NTT DATA Corporation 不完全な例外ハンドリング・ロギングの例 try { // … } catch (Exception e) {// ← Catch widely everywhere e.printStackTrace(); } try { // … } catch (Exception e) { throw new RuntimeException(" Nice catch ! ;)", e); } BAD CASE
54.
54Copyright © 2015
NTT DATA Corporation 不完全な例外ハンドリング・ロギングの例 try { // … } catch (Exception e) {// ← Catch widely everywhere e.printStackTrace(); } try { // … } catch (Exception e) { throw new RuntimeException(" Nice catch ! ;)", e); } BAD CASE 例外の種別や付加情報がない ため、例外捕捉時の対処が 正しく行えない、等 アプリケーションログに 障害情報が出力されない 例外発生後に処理が継続してしまう、等
55.
55Copyright © 2015
NTT DATA Corporation 必要な情報を付加した例外の例 @Service @Transactional public class OrderServiceImpl implements OrderSerivce { public OrderResult order(Order o) { // … if (orderQuantity > stockQuantity) { ResultMessages msg = ResultMessages.error() .add("ORDER.STOCK.OVER", orderQuantity); throw new BusinessException(msg); } // … } } Message Key GOOD CASE✓ 例外ハンドリング時に必要な、 画面出力メッセージを 例外発生時に設定する ビジネスルールの違反を判定
56.
56Copyright © 2015
NTT DATA Corporation 例外ハンドリングのベストプラクティス • リクエスト単位(Controllerのメソッド単位) で集約してハンドリング・・・try-catch • ユースケース単位(Controller単位)で集約 してハンドリング・・・@ExceptionHandler • Servlet単位で集約してハンドリング・・・ HandlerExceptionResolver • サーブレットコンテナのerror-page機能で ハンドリング ・例外の種別に応じた、段階的なハンドリングの集約 ・例外の種別を識別可能にするための情報付加 http://terasolunaorg.github.io/guideline/5.0.1.RELEASE/ja/ArchitectureInDetail/ExceptionHandling.html 粒度小 処理毎に 柔軟な ハンドリング で使用性向上 粒度大 エラー時の 解析情報を 漏れなく捕捉
57.
57Copyright © 2015
NTT DATA Corporation 1. リクエスト単位(Controllerのメソッド単位)でハンドリング Xxx screen <Spring MVC> Dispatcher Servlet Controller Service 1 2 3 4 7 catch BusinessException 6’ 8 9 <Spring MVC> Model xxx.jsp <jsp tag library> Messages PanelTag Xxx screen Result Message. Result Message 6 Monitoring log <AOP> ResultMessages LoggingInterceptor 5 applicationContext.xml Application log defile bean & AOPException Loggerwarn 4’5’ 10 Business Exception Result Message
58.
58Copyright © 2015
NTT DATA Corporation Xxx screen <Spring MVC> Dispatcher Servlet Controller Service 1 2 3 4 7 catch BusinessException 6’ 8 9 <Spring MVC> Model xxx.jsp <jsp tag library> Messages PanelTag Xxx screen Result Message. Result Message 6 Monitoring log <AOP> ResultMessages LoggingInterceptor 5 applicationContext.xml Application log defile bean & AOPException Loggerwarn 4’5’ 10 Business Exception Result Message 1. リクエスト単位(Controllerのメソッド単位)でハンドリング date:2015-04-23 13:30:05 thread:tomcat-http--18 X- Track:b613ef3d281d4e018eadeb62bae308d5 level:WARN logger:o.t.gfw.common.exception.ExceptionLogger message:[e.xx.fw.8001] ResultMessages [type=error, list=[ResultMessage [code=ORDER.STOCK.OVER, args=[100], text=null]]] org.terasoluna.gfw.common.exception.BusinessException: ResultMessages [type=error, list=[ResultMessage [code=ORDER.STOCK.OVER, args=[100], text=null]]] at com.example.domain.service.demo.DemoService.doSomething(DemoService.java:13) ~[springio-demo-domain-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] at com.example.domain.service.demo.DemoService$$FastClassBySpringCGLIB$$c614e7b9.inv oke(<generated>) ~[spring-core-4.1.4.RELEASE.jar:1.0-SNAPSHOT] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.1.4.RELEASE.jar:4.1.4.RELEASE] …
59.
59Copyright © 2015
NTT DATA Corporation 1. リクエスト単位(Controllerのメソッド単位)でハンドリング Xxx screen <Spring MVC> Dispatcher Servlet Controller Service 1 2 3 4 7 catch BusinessException 6’ 8 9 <Spring MVC> Model xxx.jsp <jsp tag library> Messages PanelTag Xxx screen Result Message. Result Message 6 Monitoring log <AOP> ResultMessages LoggingInterceptor 5 applicationContext.xml Application log defile bean & AOPException Loggerwarn 4’5’ 10 Business Exception Result Message ORDER.STOCK.OVER=The requested order is out of stock! (quantity={0})
60.
60Copyright © 2015
NTT DATA Corporation 2. ユースケース単位(Controller単位)でハンドリング Xxx screen <Spring MVC> Dispatcher Servlet Controller Service 1 2 3 6 7 11 12 <Spring MVC> Model 4 yyy.jsp <jsp tag library> Messages PanelTag Result Message Yyy screen Result Message. 5 <Spring MVC> ExceptionHandler ExceptionResolver <AOP> HandlerExceptionResolver LoggingInterceptor Monitoring log Application log 9 8 10 spring- mvc.xmldefile bean & AOP 3’3’ 13 Define @ExceptionHandler( XyzException.class) Xyz Exception error warn Info Exception Logger
61.
61Copyright © 2015
NTT DATA Corporation 3. Servlet単位でハンドリング(HandlerExceptionResolver) Xxx screen <Spring MVC> Dispatcher Servlet Controller <Spring MVC Extention> SystemException ResolverSystem Error screen System Exception.jsp Service 1 2 3 10 5 <Servlet API> HttpServlet Request exception code (error code) exception code + Message. 4 6 6’ 9 11 message is get from message resources Monitoring log 8 spring- mvc.xml Application log define bean & exception handling rule <AOP> HandlerExceptionResolver LoggingInterceptor 7 spring- mvc.xml defile bean & AOP 4’4’ 12 error warn Info Exception Logger System Exception
62.
62Copyright © 2015
NTT DATA Corporation 4.サーブレットコンテナのerror-page機能でハンドリング Xxx screen <Spring MVC> Dispatcher Servlet Controller System Error screen error.html Service 1 2 3 7 Message. <Application Server> Servlet Container Server log 6 XyzError is wrapped in ServletException. 4 web.xml <error-page> Monitoring log Application log 5 5’ 4’ define exception handling rule. Exception Logger <Servlet Filter> Exception LoggingFilter web.xml applicationContext.xml defile bean & filter 3’3’ 8 Servlet Exception XyzError XyzError error warn Info
63.
63Copyright © 2015
NTT DATA Corporation 共通ライブラリによる実現の容易化 Springでは提供されないがエンタープライズアプリ開発で 頻出する共通機能を提供 https://github.com/terasolunaorg/terasoluna-gfw http://terasolunaorg.github.io/guideline/5.0.1.RELEASE/ja/Overview/FrameworkStack.html#building-blocks-of-common-library 例外ハンドリング エラー情報を伝搬、記録するための 例外クラス/logger/interceptor/例外ハンドラ システム時刻 時刻置換可能なシステム時刻取得API 二重送信防止 リクエストの二重送信からWebアプリケーションを守るため の仕組み(クラス) タグライブラリ群 ページングを実現するタグ、メッセージ/エラー表示タグ、 … …
64.
64Copyright © 2015
NTT DATA Corporation 共通ライブラリによる実現の容易化
65.
65Copyright © 2015
NTT DATA Corporation 例外ハンドリングに必要な設定 <!-- Exception Code Resolver. --> <bean id="exceptionCodeResolver" class="org.terasoluna.gfw.common.exception.SimpleMappingExceptionCodeResolver"> <!-- omitted... --> </bean> <!-- Exception Logger. --> <bean id="exceptionLogger" class="org.terasoluna.gfw.common.exception.ExceptionLogger"> <property name="exceptionCodeResolver" ref="exceptionCodeResolver" /> </bean> <!-- Setting Exception Handling. --> <!-- Exception Resolver. --> <bean class="org.terasoluna.gfw.web.exception.SystemExceptionResolver"> <property name="exceptionCodeResolver" ref="exceptionCodeResolver" /> <!-- omitted... --> </bean> <!-- Setting AOP. --> <bean id="handlerExceptionResolverLoggingInterceptor" class="org.terasoluna.gfw.web.exception.HandlerExceptionResolverLoggingInterceptor"> <property name="exceptionLogger" ref="exceptionLogger" /> </bean> <aop:config> <aop:advisor advice-ref="handlerExceptionResolverLoggingInterceptor" pointcut="execution(* org.springframework.web.servlet.HandlerExceptionResolver.resolveException(..))" /> </aop:config> <!-- AOP. --> <bean id="resultMessagesLoggingInterceptor" class="org.terasoluna.gfw.common.exception.ResultMessagesLoggingInterceptor"> <property name="exceptionLogger" ref="exceptionLogger" /> </bean> <aop:config> <aop:advisor advice-ref="resultMessagesLoggingInterceptor" pointcut="@within(org.springframework.stereotype.Service)" /> </aop:config> applicationContext.xml spring-mvc.xml spring-demo-domain.xml
66.
66Copyright © 2015
NTT DATA Corporation 例外ハンドリングに必要な設定 <!-- Exception Code Resolver. --> <bean id="exceptionCodeResolver" class="org.terasoluna.gfw.common.exception.SimpleMappingExceptionCodeResolver"> <!-- omitted... --> </bean> <!-- Exception Logger. --> <bean id="exceptionLogger" class="org.terasoluna.gfw.common.exception.ExceptionLogger"> <property name="exceptionCodeResolver" ref="exceptionCodeResolver" /> </bean> <!-- Setting Exception Handling. --> <!-- Exception Resolver. --> <bean class="org.terasoluna.gfw.web.exception.SystemExceptionResolver"> <property name="exceptionCodeResolver" ref="exceptionCodeResolver" /> <!-- omitted... --> </bean> <!-- Setting AOP. --> <bean id="handlerExceptionResolverLoggingInterceptor" class="org.terasoluna.gfw.web.exception.HandlerExceptionResolverLoggingInterceptor"> <property name="exceptionLogger" ref="exceptionLogger" /> </bean> <aop:config> <aop:advisor advice-ref="handlerExceptionResolverLoggingInterceptor" pointcut="execution(* org.springframework.web.servlet.HandlerExceptionResolver.resolveException(..))" /> </aop:config> <!-- AOP. --> <bean id="resultMessagesLoggingInterceptor" class="org.terasoluna.gfw.common.exception.ResultMessagesLoggingInterceptor"> <property name="exceptionLogger" ref="exceptionLogger" /> </bean> <aop:config> <aop:advisor advice-ref="resultMessagesLoggingInterceptor" pointcut="@within(org.springframework.stereotype.Service)" /> </aop:config> applicationContext.xml spring-mvc.xml spring-demo-domain.xml ブランクプロジェクトで全て設定済み
67.
67Copyright © 2015
NTT DATA Corporation エンタープライズシステム開発での課題 Springのバージョン組合せ選定 不完全な 例外ハンドリング・ロギング 乱雑なプロジェクト構成 信頼性の低いコードの模倣 フレームワークの長期利用 Spring等の膨大な設定 ✓ ✓ ✓ ✓
68.
68Copyright © 2015
NTT DATA Corporation 信頼性の低いコードの模倣 コーディングで詰まったとき、 あなたはどうしますか?
69.
69Copyright © 2015
NTT DATA Corporation 信頼性の低いコードの模倣 コーディングで詰まったとき、 あなたはどうしますか? 書籍のコードを そのまま流用する Webフォーラムの コードを真似する
70.
70Copyright © 2015
NTT DATA Corporation 信頼性の低いコードの模倣 コーディングで詰まったとき、 あなたはどうしますか? 書籍のコードを そのまま流用する Webフォーラムの コードを真似する ・エンタープライズ開発で必要 な考慮が漏れている可能性 ・ライブラリのバージョン違いで 正しく動作しない可能性
71.
Copyright © 2015
NTT DATA Corporation 71 ガイドライン • 各機能の詳細解説 • チュートリアル(学習コンテンツ) 理解しやすいように、 図を多数記載 • コードサンプル • 検証済みで品質確保された開発方法のベストプラクティス 流用して開発できるように コードサンプルを多数記載 コードサンプルの解説 も記載 • コードサンプル • エンタープライズ向けの実践的な開発ノウハウ ・・・ 各機能の拡張方法も記載 Note、Tip、Warning、Hintなど、 実践的な開発ノウハウを多数記載 実装方法とその根底 にある考え方も記載 ①基本知識の習得、AP基盤の検討 ③FWの拡張方針検討 ④AP基盤の設計・製造 ②実現性検証 アーキテクトの作業におけるガイドライン活用例 http://terasolunaorg.github.io/guideline
72.
72Copyright © 2015
NTT DATA Corporation エンタープライズ利用を見据えたサンプルコード エンタープライズシステム開発で 必要な機能を網羅 1700+ pages!
73.
73Copyright © 2015
NTT DATA Corporation エンタープライズシステム開発での課題 Springのバージョン組合せ選定 不完全な 例外ハンドリング・ロギング 乱雑なプロジェクト構成 信頼性の低いコードの模倣 フレームワークの長期利用 Spring等の膨大な設定 ✓ ✓ ✓ ✓ ✓
74.
74Copyright © 2015
NTT DATA Corporation 長期的に保守する場合の課題 大量のサンプルコードの 品質を担保できるのか? どのように後方互換性 を担保するか?
75.
75Copyright © 2015
NTT DATA Corporation FW/プラットフォーム FY2015 FY2016 FY2017 サ ー バ OSSフレームワーク AP・DBサーバ JVM 長期的に保守する場合の課題 Spring 3.2 4.0 4.1 4.2 4.x or 5.x Oracle DB 12cR1 Tomcat 7 8 9 ・・・ Oracle JavaSE7 8 9 ・・・ Springや周辺プラットフォームは日々アップデートされている ・Springをバージョンアップしても正しく動作するのか ・プラットフォームをアップデートしても利用できるのか ? ? ?
76.
76Copyright © 2015
NTT DATA Corporation テストによるサンプルコードの品質担保 全てのサンプルコードの テストがSeleniumで実装 Selenium
77.
77Copyright © 2015
NTT DATA Corporation AP サーバ Selenium Jenkins 継続可能なテスト deploy test 700シナリオ以上の テストを日次で実行 GitBucket テスト用アプリケーション & テストシナリオ
78.
78Copyright © 2015
NTT DATA Corporation AP サーバ Selenium Jenkins 継続可能なテスト テスト用アプリケーション & テストシナリオ deploy test 700シナリオ以上の テストを日次で実行 GitBucket 後方互換の問題を検知し 改善、FW更新の影響として周知
79.
79Copyright © 2015
NTT DATA Corporation エンタープライズでよく使用されるプラットフォーム ProjectProjectProject OpenJDK Oracle JDK Apache Tomcat IBM WebSphere Application Server Fujitsu Interstage Application Server Oracle WebLogic Server JBoss Enterprise Application Platform NEC WebOTX Application Server Cosminexus: Hitachi Application Server Caucho Resin Oracle Database IBM DB2 PostgreSQL MySQL IBM JDK 製品を組合せた環境でのテストが必要 ⇒多環境の管理を簡易化したい
80.
80Copyright © 2015
NTT DATA Corporation VAGRANT VAGRANTによる環境管理 PostgreSQL Oracle DB2 Tomcat + Oracle JDK 7 Tomcat + Open JDK 7 WebLogic + Oracle JDK 7 JBoss EAP + Open JDK 7 Tomcat + Oracle JDK 8 WebLogic + Oracle JDK 8 Tomcat + Open JDK 8 WAS + IBM JDK 7 JBoss EAP + Open JDK 8 Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile … … Git 環境は再作成可能 Jenkins
81.
81Copyright © 2015
NTT DATA Corporation VAGRANT VAGRANTによる環境管理 PostgreSQL Oracle DB2 Tomcat + Oracle JDK 7 Tomcat + Open JDK 7 WebLogic + Oracle JDK 7 JBoss EAP + Open JDK 7 Tomcat + Oracle JDK 8 WebLogic + Oracle JDK 8 Tomcat + Open JDK 8 WAS + IBM JDK 7 JBoss EAP + Open JDK 8 Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile Vagrantfile … … Git リリース前に各環境の 組み合わせでAll Greenを確認 環境は再作成可能 ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ ✓ Jenkins
82.
82Copyright © 2015
NTT DATA Corporation AP サーバ Selenium Jenkins 負荷性能テスト deploy test JMeterを使用し た負荷性能テスト も定期的に実施 700シナリオ以上の テストを日次で実行 + GitBucket JMeter テスト用アプリケーション & テストシナリオ
83.
83Copyright © 2015
NTT DATA Corporation 負荷性能テスト • ボトルネックやメモリリークの発見 • Spring/共通ライブラリ/サンプルアプリ • 前バージョンのフレームワークとの性能比較 性能の基準値とする指標 可変パラメータ リクエストスループット スレッドプールサイズ ・・・ 評価指標 処理スループット レスポンスタイム ハードウェアリソース使用率(CPU / mem / Java Heap size / GC time / ...) ・・・
84.
84Copyright © 2015
NTT DATA Corporation 負荷性能テストのレポート(イメージ) 前回リリースバージョン 次回リリースバージョン 性能劣化の傾向が 見られないことを確認
85.
85Copyright © 2015
NTT DATA Corporation エンタープライズシステム開発での課題 Springのバージョン組合せ選定 不完全な 例外ハンドリング・ロギング 乱雑なプロジェクト構成 信頼性の低いコードの模倣 フレームワークの長期利用 Spring等の膨大な設定 ✓ ✓ ✓ ✓ ✓ ✓
86.
Copyright © 2015
NTT DATA Corporation 86 Springへの貢献
87.
87Copyright © 2015
NTT DATA Corporation Springへの当社の貢献 Spring Framework (38) Spring Security (11) Spring Data (4) SPR-13379 (Resolved) SPR-13359 (Resolved) SPR-13350 (Resolved) SPR-13124 (Resolved) SPR-13103 (Resolved) SPR-13102 (Resolved) SPR-13041 (Resolved) SPR-13038 (Resolved) SPR-13025 (Resolved) SPR-13000 (Resolved) SPR-12994 (Resolved) SPR-12993 (Resolved) SPR-12992 (Resolved) SPR-12991 (Resolved) SPR-12990 (Resolved) SPR-12988 (Resolved) SPR-12987 (Resolved) SPR-12985 (Resolved) SPR-12981 (Resolved) SPR-12980 (Resolved) SPR-12979 (Resolved) SPR-12853 SPR-12819 (Resolved) SPR-12792 (Resolved) SPR-12743 (Resolved) SPR-12510 (Resolved) SPR-12509 (Resolved) SPR-12442 (Resolved) SPR-12354 (Resolved) SPR-12265 (Resolved) SPR-12229 (Resolved) SPR-11970 (Resolved) SPR-11826 SPR-11821 (Resolved) SPR-11810 (Resolved) SPR-11670 (Resolved) SPR-11669 SPR-11074 (Resolved) SEC-2403 SEC-2826 (Resolved) SEC-2834 (Resolved) SEC-2835 (Resolved) SEC-2836 SEC-2840 (Resolved) SEC-2880 (Resolved) SEC-2903 SEC-2905 SEC-2910 SEC-3003 (Resolved) DATACMNS-377 (Resolved) DATACMSN-379 (Resolved) DATACMNS-408 (Resolved) DATAJPA-473 (Resolved) 脆弱性の報告 バグの報告 @ JIRA (~ 2015-08-26) CVE-2014-3625 Directory Traversal in Spring Framework CVE-2015-3192 DoS Attack with XML Input
88.
Copyright © 2015
NTT DATA Corporation 88 まとめ
89.
89Copyright © 2015
NTT DATA Corporation まとめ • TERASOLUNA FWはSpringをフルに活用し、 エンタープライズシステム開発に必要な ソリューションとして整備している ソフトウェアスタック ブランクプロジェクト(Maven Archetype) ガイドライン、など • 継続可能なテストの仕組みがTERASOLUNA FWの 品質を支えている http://terasoluna.org
90.
90Copyright © 2015
NTT DATA Corporation TERASOLUNA FWのおさらい •Spring, MyBatisなどのOSSフレームワークソフトウェアフレームワーク •エンタープライズ向けに必要な汎用的な部品共通ライブラリ •OSSを利用したエンタープライズ向け アプリ開発におけるベストプラクティスドキュメントガイドライン •基本的な開発方法を学ぶ学習教材チュートリアル •最低限の機能を実装したサンプル・アプリケーションサンプルAP •プロジェクト構成のひな形ブランクプロジェクト •機能毎のE2Eテスト自動実行基盤、負荷性能テスト シナリオE2E/性能テストスイート
91.
91Copyright © 2015
NTT DATA Corporation 最後に Springをエンタープライズシステム開発で 積極的に活用し、 情報交換やコミュニティ活動を活発化して さらなるSpringの発展、繁栄に向けて 共に歩んでいきましょう。 NTTデータは今後もSpringの ベストプラクティスをOSSで提供し続けます。
92.
Copyright © 2011
NTT DATA Corporation Copyright © 2015 NTT DATA Corporation 「TERASOLUNA」及びそのロゴは、日本及びその他の国おける株式会社NTTデータの商標または登録商標です。 その他、記載されている会社名、商品名、サービス名等は、各社の商標または登録商標です。
Download now