SlideShare a Scribd company logo
1 of 92
Download to read offline
Copyright © 2015 NTT DATA Corporation
2015-08-28
池谷 智行@JSUG Spring in Summer 2015
大規模・長期保守を見据えたエンタープライズ
システム開発へのSpring Frameworkの適用
Copyright © 2015 NTT DATA Corporation 2
自己紹介
池谷 智行
• TERASOLUNA Frameworkの整備、展開
• Spring Frameworkの実務経験
• Core/MVC/Security/Data/Batch
Copyright © 2015 NTT DATA Corporation 3
Agenda
• TERASOLUNA Frameworkとは?
• Spring Frameworkを利用した時の課題
• TERASOLUNA Frameworkにおける課題の解決方法
• SpringへのContribution
• Q&A
Copyright © 2015 NTT DATA Corporation 4
TERASOLUNA Framework
とは?
5Copyright © 2015 NTT DATA Corporation
TERASOLUNAとは?
Process
Environment
Support
数多くのシステム開発で
培ったノウハウを盛り込んだ
標準開発手順・管理手順
ソフトウェアを開発する際の
雛形になるフレームワーク
と開発を支援するツール
蓄積されたノウハウ
を展開するための
研修や教育サービス
標準手順
サポート
開発環境
TERASOLUNAは、 NTTデータのシステム開発を支えるオープン系システム開発の
ための総合ソリューションです。数多くのシステム開発実績をもとにした
「標準手順」「開発環境」「サポート」をトータルで提供しており、TERASOLUNAを
活用することで、高品質なシステム開発が実現できます。
TERASOLUNA Framework
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は、今後もサポートを継続していきます
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
当社がパッチ作成・公開
当社が報告
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を継続利用している
ことを不安視するユーザが増加
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のご紹介を
していきます
※脆弱性発見以前より
新たなフレームワークの開発を着手し整備していた
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との違い
Copyright © 2015 NTT DATA Corporation 11
Springは機能追加し続けており、
今後も迅速な新規テクノロジーへの追従が期待できる
Java EEは仕様策定からAPサーバベンダの実装までに
時間がかかるため、変化の追従に時間を要する
当社ではSpringを10年以上活用しており、社内に
適用実績、開発リソース、開発ノウハウが多く
存在している
適用案件や開発者が多く、
セキュリティ面の改善活動が活発に実施されている
Spring Security等のセキュリティ対策OSSの採用により、
セキュリティ面への対応を強化できる
グローバル市場でのシェアNo.1であり、技術者や情報が
豊富に存在するため、要因確保や書籍などによる
情報収集がしやすい
開発
リソースの
確保
しやすさ
世の中の
変化への
対応
セキュリ
ティ面の
強化
社内に
蓄積した
ノウハウ量
Spring
なぜSpringなのか?
12Copyright © 2015 NTT DATA Corporation
TERASOLUNA FWの構成要素
•Spring, MyBatisなどのOSSフレームワークソフトウェアフレームワーク
•エンタープライズ向けに必要な汎用的な部品共通ライブラリ
•OSSを利用したエンタープライズ向け
アプリ開発におけるベストプラクティスドキュメントガイドライン
•基本的な開発方法を学ぶ学習教材チュートリアル
•基本的な機能を実装したサンプル・アプリケーションサンプルAP
•プロジェクト構成のひな形ブランクプロジェクト
•機能毎のE2Eテスト自動実行基盤、負荷性能テスト
シナリオE2E/性能テストスイート
13Copyright © 2015 NTT DATA Corporation
TERASOLUNA FWの構成要素
•Spring, MyBatisなどのOSSフレームワークソフトウェアフレームワーク
•エンタープライズ向けに必要な汎用的な部品共通ライブラリ
•OSSを利用したエンタープライズ向け
アプリ開発におけるベストプラクティスドキュメントガイドライン
•基本的な開発方法を学ぶ学習教材チュートリアル
•基本的な機能を実装したサンプル・アプリケーションサンプルAP
•プロジェクト構成のひな形ブランクプロジェクト
•機能毎のE2Eテスト自動実行基盤、負荷性能テスト
シナリオE2E/性能テストスイート
GitHubで公開しています
http://terasoluna.org
14Copyright © 2015 NTT DATA Corporation
TERASOLUNA FWのソフトウェアスタック
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
Copyright © 2015 NTT DATA Corporation 16
Spring Frameworkを利用
した時の課題
17Copyright © 2015 NTT DATA Corporation
エンタープライズシステム開発での課題
Springのバージョン組合せ選定
不完全な
例外ハンドリング・ロギング
乱雑なプロジェクト構成
フレームワークの長期利用
大規模・長期保守なエンタープライズシステム開発
でソフトウェアアーキテクトが直面する課題
効率性
移植性
信頼性
保守性
信頼性の低いコードの模倣
Spring等の膨大な設定
18Copyright © 2015 NTT DATA Corporation
エンタープライズシステム開発での課題
Springのバージョン組合せ選定
不完全な
例外ハンドリング・ロギング
乱雑なプロジェクト構成
信頼性の低いコードの模倣
ソフトウェアフレームワーク
共通ライブラリ
ガイドライン
チュートリアル
サンプルAP
ブランクプロジェクト
フレームワークの長期利用
E2E/性能テストスイート
Spring等の膨大な設定
各構成要素で補い合うことにより課題をカバー
19Copyright © 2015 NTT DATA Corporation
エンタープライズシステム開発での課題
Springのバージョン組合せ選定
不完全な
例外ハンドリング・ロギング
乱雑なプロジェクト構成
信頼性の低いコードの模倣
ソフトウェアフレームワーク
共通ライブラリ
ガイドライン
チュートリアル
サンプルAP
ブランクプロジェクト
フレームワークの長期利用
E2E/性能テストスイート
Spring等の膨大な設定
各構成要素で補い合うことにより課題をカバー
課題の詳細と
TERASOLUNA FWでの
解決アプローチを
これから紹介します
Copyright © 2015 NTT DATA Corporation 20
課題の詳細と
解決アプローチ
21Copyright © 2015 NTT DATA Corporation
エンタープライズシステム開発での課題
Springのバージョン組合せ選定
不完全な
例外ハンドリング・ロギング
乱雑なプロジェクト構成
信頼性の低いコードの模倣
フレームワークの長期利用
Spring等の膨大な設定
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
23Copyright © 2015 NTT DATA Corporation
Global FWのソフトウェアスタック
24Copyright © 2015 NTT DATA Corporation
Global FWのソフトウェアスタック
各Springサブプロジェクトの
どのバージョンを使用すべきか?
3rd-partyライブラリは
どのバージョンを使用すべきか?
25Copyright © 2015 NTT DATA Corporation
Global FWのソフトウェアスタック
各Springサブプロジェクトの
どのバージョンを使用すべきか?
3rd-partyライブラリは
どのバージョンを使用すべきか?
Global FWではバージョンの
組合せの選定を独自に行うことで
カバーしていた
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
27Copyright © 2015 NTT DATA Corporation
TERASOLUNA FWのソフトウェアスタック
28Copyright © 2015 NTT DATA Corporation
TERASOLUNA FWのソフトウェアスタック
2014/7にリリースされた
Spring IO Platform
を採用することで解決
29Copyright © 2015 NTT DATA Corporation
Spring IO Platformとは?
https://spring.io/platform
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
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テクノロジ間の互換性の
ためのテストやビルドへ費やされていた
「何週間にも及ぶ退屈でつまらない労力」
が削減される
32Copyright © 2015 NTT DATA Corporation
Spring IO Platformの貢献
Spring Teamが
決定し、テスト済みであるSpringや
3rd-partyライブラリの組合せを利用できる
• バージョン選定・検討に対するコスト削減
• 全世界のSpring IO Platformユーザとの
情報共有が可能
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等)
次々頁参照
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
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ライブラリの
バージョン番号が引き継がれる
36Copyright © 2015 NTT DATA Corporation
エンタープライズシステム開発での課題
Springのバージョン組合せ選定
不完全な
例外ハンドリング・ロギング
乱雑なプロジェクト構成
信頼性の低いコードの模倣
フレームワークの長期保守
フレームワーク更新時の影響
Spring等の膨大な設定
✓
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... ...
必要な設定が漏れていたり、
初期値のまま使われてしまう
38Copyright © 2015 NTT DATA Corporation
エンタープライズシステム開発での課題
Springのバージョン組合せ選定
不完全な
例外ハンドリング・ロギング
乱雑なプロジェクト構成
信頼性の低いコードの模倣
フレームワークの長期利用
Spring等の膨大な設定
✓
39Copyright © 2015 NTT DATA Corporation
乱雑なプロジェクト構成
よくある課題
• 複数のプロジェクトで構造の一貫性がとれて
いない(行き当たりばったりで構造を設計)
• コードや設定が特定の環境に依存し、
ステージング環境(テスト環境、本番環境)
でのテストのしやすさが考慮されていない
• 一般的なコーディング作法に反した依存関係
(ex. ServiceクラスでHttpSessionを扱う)
40Copyright © 2015 NTT DATA Corporation
TERASOLUNA FWでの解決方法
• レイヤ分割したマルチプロジェクト構成
• 環境依存を集約し、アプリケーションと
切り離すことが可能な構造
• エンタープライズ開発に必要な
各種設定・ライブラリ依存関係が設定済
エンタープライズ開発に必要なノウハウを
詰め込んだプロジェクト構成の雛形
「ブランクプロジェクト」を提供
41Copyright © 2015 NTT DATA Corporation
ブランクプロジェクト
エンタープライズ開発時に必要になる設定が定義済みの
ブランクプロジェクトのarchetypeを提供
環境依存する資材を集約
するプロジェクト
アプリケーションレイヤの
プロジェクト
ドメイン・インフラレイヤの
プロジェクト
https://github.com/terasolunaorg/terasoluna-gfw-web-multi-blank
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層に分類し、依存関係を束縛
43Copyright © 2015 NTT DATA Corporation
レイヤ間の依存関係の矯正
Domain Layer
Application Layer
誤ったレイヤ間の依存関係を
コンパイル時に(IDE赤線で)検出できる
Servlet API等
への依存を
物理的に禁止
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
45Copyright © 2015 NTT DATA Corporation
ブランクプロジェクトの生成方法
TERASOLUNA FWが
依存・推奨する
ライブラリが定義済
46Copyright © 2015 NTT DATA Corporation
ブランクプロジェクトの内部構成
Domain Layer
Infrastructure Layer
47Copyright © 2015 NTT DATA Corporation
ブランクプロジェクトの内部構成
Application Layer
48Copyright © 2015 NTT DATA Corporation
ブランクプロジェクトの内部構成
ログ出力設定やデータソース定義など、
ステージング環境によって異なる設定を
本プロジェクトに集約することで、
設定値の置換を容易にしている
49Copyright © 2015 NTT DATA Corporation
ブランクプロジェクトの実行
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
ブランクプロジェクトの実用例を公開
51Copyright © 2015 NTT DATA Corporation
(参考)TERASOLUNA FWとは異なるアプローチ
Spring Boot(2014/1~)も
ライブラリ依存関係や初期設定相当
(Auto-Configuration)を提供
52Copyright © 2015 NTT DATA Corporation
エンタープライズシステム開発での課題
Springのバージョン組合せ選定
不完全な
例外ハンドリング・ロギング
乱雑なプロジェクト構成
信頼性の低いコードの模倣
フレームワークの長期利用
Spring等の膨大な設定
✓
✓
✓
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
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
例外の種別や付加情報がない
ため、例外捕捉時の対処が
正しく行えない、等
アプリケーションログに
障害情報が出力されない
例外発生後に処理が継続してしまう、等
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✓
例外ハンドリング時に必要な、
画面出力メッセージを
例外発生時に設定する
ビジネスルールの違反を判定
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
粒度小
処理毎に
柔軟な
ハンドリング
で使用性向上
粒度大
エラー時の
解析情報を
漏れなく捕捉
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
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]
…
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})
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
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
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
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アプリケーションを守るため
の仕組み(クラス)
タグライブラリ群 ページングを実現するタグ、メッセージ/エラー表示タグ、
… …
64Copyright © 2015 NTT DATA Corporation
共通ライブラリによる実現の容易化
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
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
ブランクプロジェクトで全て設定済み
67Copyright © 2015 NTT DATA Corporation
エンタープライズシステム開発での課題
Springのバージョン組合せ選定
不完全な
例外ハンドリング・ロギング
乱雑なプロジェクト構成
信頼性の低いコードの模倣
フレームワークの長期利用
Spring等の膨大な設定
✓
✓
✓
✓
68Copyright © 2015 NTT DATA Corporation
信頼性の低いコードの模倣
コーディングで詰まったとき、
あなたはどうしますか?
69Copyright © 2015 NTT DATA Corporation
信頼性の低いコードの模倣
コーディングで詰まったとき、
あなたはどうしますか?
書籍のコードを
そのまま流用する
Webフォーラムの
コードを真似する
70Copyright © 2015 NTT DATA Corporation
信頼性の低いコードの模倣
コーディングで詰まったとき、
あなたはどうしますか?
書籍のコードを
そのまま流用する
Webフォーラムの
コードを真似する
・エンタープライズ開発で必要
な考慮が漏れている可能性
・ライブラリのバージョン違いで
正しく動作しない可能性
Copyright © 2015 NTT DATA Corporation 71
ガイドライン
• 各機能の詳細解説
• チュートリアル(学習コンテンツ)
理解しやすいように、
図を多数記載
• コードサンプル
• 検証済みで品質確保された開発方法のベストプラクティス
流用して開発できるように
コードサンプルを多数記載
コードサンプルの解説
も記載
• コードサンプル
• エンタープライズ向けの実践的な開発ノウハウ
・・・
各機能の拡張方法も記載 Note、Tip、Warning、Hintなど、
実践的な開発ノウハウを多数記載
実装方法とその根底
にある考え方も記載
①基本知識の習得、AP基盤の検討
③FWの拡張方針検討 ④AP基盤の設計・製造
②実現性検証
 アーキテクトの作業におけるガイドライン活用例
http://terasolunaorg.github.io/guideline
72Copyright © 2015 NTT DATA Corporation
エンタープライズ利用を見据えたサンプルコード
エンタープライズシステム開発で
必要な機能を網羅
1700+ pages!
73Copyright © 2015 NTT DATA Corporation
エンタープライズシステム開発での課題
Springのバージョン組合せ選定
不完全な
例外ハンドリング・ロギング
乱雑なプロジェクト構成
信頼性の低いコードの模倣
フレームワークの長期利用
Spring等の膨大な設定
✓
✓
✓
✓
✓
74Copyright © 2015 NTT DATA Corporation
長期的に保守する場合の課題
大量のサンプルコードの
品質を担保できるのか?
どのように後方互換性
を担保するか?
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をバージョンアップしても正しく動作するのか
・プラットフォームをアップデートしても利用できるのか
?
?
?
76Copyright © 2015 NTT DATA Corporation
テストによるサンプルコードの品質担保
全てのサンプルコードの
テストがSeleniumで実装
Selenium
77Copyright © 2015 NTT DATA Corporation
AP
サーバ
Selenium
Jenkins
継続可能なテスト
deploy
test
700シナリオ以上の
テストを日次で実行
GitBucket
テスト用アプリケーション
& テストシナリオ
78Copyright © 2015 NTT DATA Corporation
AP
サーバ
Selenium
Jenkins
継続可能なテスト
テスト用アプリケーション
& テストシナリオ
deploy
test
700シナリオ以上の
テストを日次で実行
GitBucket
後方互換の問題を検知し
改善、FW更新の影響として周知
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
製品を組合せた環境でのテストが必要
⇒多環境の管理を簡易化したい
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
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
82Copyright © 2015 NTT DATA Corporation
AP
サーバ
Selenium
Jenkins
負荷性能テスト
deploy
test
JMeterを使用し
た負荷性能テスト
も定期的に実施
700シナリオ以上の
テストを日次で実行
+
GitBucket
JMeter
テスト用アプリケーション
& テストシナリオ
83Copyright © 2015 NTT DATA Corporation
負荷性能テスト
• ボトルネックやメモリリークの発見
• Spring/共通ライブラリ/サンプルアプリ
• 前バージョンのフレームワークとの性能比較
性能の基準値とする指標
可変パラメータ リクエストスループット
スレッドプールサイズ
・・・
評価指標 処理スループット
レスポンスタイム
ハードウェアリソース使用率(CPU / mem /
Java Heap size / GC time / ...)
・・・
84Copyright © 2015 NTT DATA Corporation
負荷性能テストのレポート(イメージ)
前回リリースバージョン 次回リリースバージョン
性能劣化の傾向が
見られないことを確認
85Copyright © 2015 NTT DATA Corporation
エンタープライズシステム開発での課題
Springのバージョン組合せ選定
不完全な
例外ハンドリング・ロギング
乱雑なプロジェクト構成
信頼性の低いコードの模倣
フレームワークの長期利用
Spring等の膨大な設定
✓
✓
✓
✓
✓
✓
Copyright © 2015 NTT DATA Corporation 86
Springへの貢献
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
Copyright © 2015 NTT DATA Corporation 88
まとめ
89Copyright © 2015 NTT DATA Corporation
まとめ
• TERASOLUNA FWはSpringをフルに活用し、
エンタープライズシステム開発に必要な
ソリューションとして整備している
 ソフトウェアスタック
 ブランクプロジェクト(Maven Archetype)
 ガイドライン、など
• 継続可能なテストの仕組みがTERASOLUNA FWの
品質を支えている
http://terasoluna.org
90Copyright © 2015 NTT DATA Corporation
TERASOLUNA FWのおさらい
•Spring, MyBatisなどのOSSフレームワークソフトウェアフレームワーク
•エンタープライズ向けに必要な汎用的な部品共通ライブラリ
•OSSを利用したエンタープライズ向け
アプリ開発におけるベストプラクティスドキュメントガイドライン
•基本的な開発方法を学ぶ学習教材チュートリアル
•最低限の機能を実装したサンプル・アプリケーションサンプルAP
•プロジェクト構成のひな形ブランクプロジェクト
•機能毎のE2Eテスト自動実行基盤、負荷性能テスト
シナリオE2E/性能テストスイート
91Copyright © 2015 NTT DATA Corporation
最後に
Springをエンタープライズシステム開発で
積極的に活用し、
情報交換やコミュニティ活動を活発化して
さらなるSpringの発展、繁栄に向けて
共に歩んでいきましょう。
NTTデータは今後もSpringの
ベストプラクティスをOSSで提供し続けます。
Copyright © 2011 NTT DATA Corporation
Copyright © 2015 NTT DATA Corporation
「TERASOLUNA」及びそのロゴは、日本及びその他の国おける株式会社NTTデータの商標または登録商標です。
その他、記載されている会社名、商品名、サービス名等は、各社の商標または登録商標です。

More Related Content

What's hot

Spring integration概要
Spring integration概要Spring integration概要
Spring integration概要kuroiwa
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)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 発表資料)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 の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方歩 柴田
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング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を超えれるか?新たな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の紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るGo Miyasaka
 
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)NTT DATA Technology & Innovation
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント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...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 発表資料)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データ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTT DATA Technology & Innovation
 
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗くSpring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗くapkiban
 
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)NTT DATA Technology & Innovation
 
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)NTT DATA Technology & Innovation
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)NTT DATA Technology & Innovation
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 

What's hot (20)

Spring integration概要
Spring integration概要Spring integration概要
Spring integration概要
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)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 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング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を超えれるか?新たな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の紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
Spring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作るSpring Boot × Vue.jsでSPAを作る
Spring Boot × Vue.jsでSPAを作る
 
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
大規模データ活用向けストレージレイヤソフトのこれまでとこれから(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント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...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 発表資料)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データ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
 
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗くSpring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
 
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
その Pod 突然落ちても大丈夫ですか!?(OCHaCafe5 #5 実験!カオスエンジニアリング 発表資料)
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 

Similar to 大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用

Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3日本Javaユーザーグループ
 
CLOUDIAN at Support Engineer Night
CLOUDIAN at Support Engineer NightCLOUDIAN at Support Engineer Night
CLOUDIAN at Support Engineer NightCLOUDIAN KK
 
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用[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へ ~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へ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Yuichi Hasegawa
 
実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターンKuniteru Asami
 
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)Hinemos
 
App controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウドApp controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウドTakashi Kanai
 
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~Yuya Yamaki
 
インフラチームとCCoEの関係.pptx
インフラチームとCCoEの関係.pptxインフラチームとCCoEの関係.pptx
インフラチームとCCoEの関係.pptxssuser5c7ee4
 
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発GoAzure
 
Developer Summit_20140214
Developer Summit_20140214Developer Summit_20140214
Developer Summit_20140214samemoon
 
Visual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使うVisual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使うTakeshi Fukuhara
 
Azure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュAzure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュYasuaki Matsuda
 

Similar to 大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用 (20)

Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
 
CLOUDIAN at Support Engineer Night
CLOUDIAN at Support Engineer NightCLOUDIAN at Support Engineer Night
CLOUDIAN at Support Engineer Night
 
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用
[TL04] .NET 15 周年の今こそ考えるクラウドネイティブ アプリケーションと .NET の活用[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へ ~
 
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サービス適用パターン実プロジェクトの経験から学ぶazureサービス適用パターン
実プロジェクトの経験から学ぶazureサービス適用パターン
 
UShareSoft_20130425
UShareSoft_20130425UShareSoft_20130425
UShareSoft_20130425
 
UShareSoft_20130425
UShareSoft_20130425UShareSoft_20130425
UShareSoft_20130425
 
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
 
App controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウドApp controllerとSPFで実現するハイブリッドクラウド
App controllerとSPFで実現するハイブリッドクラウド
 
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
Visual Studio 2010でWPF/Silverlightをはじめる5つの理由~業務アプリ開発編~
 
インフラチームとCCoEの関係.pptx
インフラチームとCCoEの関係.pptxインフラチームとCCoEの関係.pptx
インフラチームとCCoEの関係.pptx
 
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
A 1-1 tfs on azure で始めるイマドキのソフトウェア開発
 
Go azure tfs_service
Go azure tfs_serviceGo azure tfs_service
Go azure tfs_service
 
Developer Summit_20140214
Developer Summit_20140214Developer Summit_20140214
Developer Summit_20140214
 
Visual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使うVisual StudioやAzureからAzure DevOpsを使う
Visual StudioやAzureからAzure DevOpsを使う
 
Springon cloudfoundry
Springon cloudfoundrySpringon cloudfoundry
Springon cloudfoundry
 
Visual Studio 2010
Visual Studio 2010Visual Studio 2010
Visual Studio 2010
 
俺とHashiCorp
俺とHashiCorp俺とHashiCorp
俺とHashiCorp
 
Azure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュAzure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュ
 

More from apkiban

What happens in Spring Cloud Netflix
What happens in Spring Cloud NetflixWhat happens in Spring Cloud Netflix
What happens in Spring Cloud Netflixapkiban
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢apkiban
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告apkiban
 
TERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO PlatformTERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO Platformapkiban
 
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~apkiban
 
Spring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わるSpring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わるapkiban
 

More from apkiban (6)

What happens in Spring Cloud Netflix
What happens in Spring Cloud NetflixWhat happens in Spring Cloud Netflix
What happens in Spring Cloud Netflix
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
 
TERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO PlatformTERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO Platform
 
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
 
Spring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わる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データの商標または登録商標です。 その他、記載されている会社名、商品名、サービス名等は、各社の商標または登録商標です。