...

Jin Kimura Webアプリケーション・フレームワーク オープンソース時代の

by user

on
Category: Documents
49

views

Report

Comments

Transcript

Jin Kimura Webアプリケーション・フレームワーク オープンソース時代の
IBM Japan, Ltd.
オープンソース時代のWebアプリケーション・フレームワーク
~Web application componentsの歩みと関連技術の変遷~
Solutions&Assets, GBS, IBM Japan
Associate ITA
Jin Kimura
2009/7/27
© Copyright IBM Japan, Ltd. 2009 All rights reserved.
IBM Japan, Ltd.
*設計者の発言 : http://watanabek.cocolog-nifty.com/blog/
アプリケーション・フレームワークとは?
„ アプリケーション・フレームワークとは
– アプリケーションを「効率よく」開発してもらうための仕組み。主にアプリケーションを
取り囲む形のライブラリーを指すことが多い。
(コンサルタントがよく使う「フレームワーク」とは異なる)
– 開発者はクラスを実装し、フレームワークがそれを呼ぶ。
(Hollywood Principle - “Don’t call us, we’ll call you - if we need to.”)
– フレームワークは様々な技術要素を隠蔽する。
(「フレームワークはオブジェクト指向を隠蔽する」と言われることも*)
„ Web application componentsの場合
– 「効率よく」を次の基本コンセプトにより実現
基本コンセプト
アプリケーションを制御する部分を再利用する
アプリケーションを制御する部分を再利用する
ツールにより品質の確保/開発対象の削減を図る
ツールにより品質の確保/開発対象の削減を図る
PSU_temp_0522
2
© 2009 IBM Corporation
IBM Japan, Ltd.
Web application componentsの歴史
„ 2000年にJava言語用MVCフレームワークとして誕生
– DAO生成ツールやJavaバッチ・フレームワークの取り込み
– Struts / Spring Framework / JSFなどとの連携
– フルスタックなフレームワークとして2009年に至る
MVC Model2
フルスタック化
DI/AOP
関連技術
EoD
Web2.0
2000
2001 2002 2003
JMS
追加機能
Web
application
components
PSU_temp_0522
3
MVC
ログ
DB
SMTP
V1.0
2004 2005 2006 2007
DI / AOP
国際化
流量制限
PDF
Struts拡張
V4.0
コード監査
DAO生成
Javaバッチ
2008
Javaバッチ
Webサービス
Spring拡張 Ajax / REST
マスターメンテ生成
V5.0
2009
FormWave連携
V6.0
JSF拡張
V7.0
© 2009 IBM Corporation
IBM Japan, Ltd.
Base / Express 共通
(参考) 全体像
Base のみ
Express のみ
„ 2009年現在のランタイム構成と開発対象
EJB (RMI-IIOP)
or direct call
Bootstrap
WS
コント
ロー
ラー
エグゼ
キュー
ター
設定ファイル
BL
PDF
IL
JTA
流量制限
設定
ファイル
サービス管理
Shell
WSファ
サード
ジョブ・クライアント
TWS
管理コマ
ンド
WSモジュール
Form
WSハンドラー
定義ファイル
Application Server
TWS連携
Web Service
(SOAP-HTTP)
サービス管理
流量制限
ログ出力
Component Plug-in Architecture
設定ファイル
JSP
マッピング
入力チェック
ロール・チェック
ユーザー管理
遷移履歴管理
画面割り振り
マルチセッション
リクエスト解析
モジュール
窓口サーブレット
Web Server
Browser
例外処理
PL
DB
JMS
ログ出力
Component Plug-in Architecture
定義ファイル
SMTP
設定ファイル
PL
Application Server
Browser
JVM/Application Server
Web管理
コンソール
リポジトリー
EJB
EJBクライ
アント
PSU_temp_0522
JVM/Application Server
4
DBMS
© 2009 IBM Corporation
IBM Japan, Ltd.
前期 フレームワークの夜明け
2000
2001 2002 2003
JMS
MVC
ログ
DB
SMTP
V1.0
2004 2005 2006 2007
DI / AOP
国際化
流量制限
PDF
Struts拡張
V4.0
コード監査
DAO生成
2008
Javaバッチ
Webサービス
Spring拡張 Ajax / REST
マスターメンテ生成
V5.0
2009
FormWave連携
V6.0
JSF拡張
V7.0
PSU_temp_0522
5
© 2009 IBM Corporation
IBM Japan, Ltd.
Web application componentsの誕生
„ 日本のとあるプロジェクトにて次の課題に遭遇
–Servlet APIの機能不足
• アプリケーションを効率よく開発する
には、データ入出力制御、処理の振り
分けなどの仕組みがさらに必要。
–JavaServer Pagesの保守性の悪さ
• 画面変更の度に業務ロジックの書き
直しが発生しないよう、JSP上に業務ロ
ジックを記述させない仕組みが必要。
–構造化設計スキルの活用
• IPO (Input-Process-Output)仕様に
基づく開発スタイルに慣れた開発者が、
JavaによるWebアプリケーションを開
発できるような仕組みが必要。
View
Controller
IDによる画面データの
取得・更新・削除
遷移元
HTML
遷移先
HTML
Front
Controller
HTTPセッション
JSP
Form
(画面データ)
Model
I
入力データ
(java.util.Map)
P
Reaction
(処理の入口)
任意の
オブジェクト
O
出力データ
(java.util.Map)
MVC
MVC Model2フレームワーク「Web
Model2フレームワーク「Web application
application components」の誕生
components」の誕生 (2000/3/31)
(2000/3/31)
PSU_temp_0522
(参考) Strutsも同時期に誕生(2001/6/15)
6
© 2009 IBM Corporation
IBM Japan, Ltd.
Eclipse
Eclipse
SIサービス向けフレームワークならではの課題と工夫1 (1/2)
„ フレームワークだけでは開発生産性は向上しない
– フレームワークはアーキテクチャーやメソドロジーに直結。フ
レームワークに沿うようそれらを調整したほうが適用による効果
が増す。
研修サービス
「フレームワーク+サービス」として提供
「フレームワーク+サービス」として提供
• プログラミング・ガイド/設計ガイドの整備
• フレームワークの利用演習を含む研修を提供
• 開発メンバーによる個別サポート実施
導入サービス
個別サポート
„ アプリケーション制御部分だけでは品質の確保
や開発対象の削減は実現しない
– アプリケーション固有部分のコード量は制御部分よ
りも多い。アプリケーション固有部分をいかに品質
よく/効率よく開発するかが生産性向上の鍵。
アプリケーション固有部分
コード生成による
コード生成による コード解析による
コード解析による
開発対象削減
品質チェック
開発対象削減
品質チェック
JSP
Formクラス
(画面クラス)
Reaction
(画面処理クラス)
Webサービス・
モジュール
DAOクラス
(DBアクセス)
ジョブ・クラス
(バッチ処理クラス)
ビジネス・ロジック
各種開発支援ツールを提供
各種開発支援ツールを提供
PSU_temp_0522
7
• Form生成ツール
• DAO生成ツール
• マスター・メンテナンス・アプリケーション生成
ツール
• Javaコード解析ツール
アプリケーション制御部分
フレームワーク再利用による開発対象削減
フレームワーク再利用による開発対象削減
© 2009 IBM Corporation
IBM Japan, Ltd.
* http://www.priorartdatabase.com/IPCOM/000160588/
SIサービス向けフレームワークならではの課題と工夫1 (2/2)
„ 基幹業務システムにはアプリケーションのき
め細かい制御が必要
– 同時ログオンや連続したHTTPリクエスト処理の
整合性維持など、様々な状況のための制御機
能が実際のシステムには求められる。
ウィンドウ1
商品明細A
商品明細A
ウィンドウ2
商品一覧
商品一覧
ポップアップ
商品明細B
商品明細B
ウィンドウ3
きめ細かい制御機能の提供
きめ細かい制御機能の提供
商品明細C
商品明細C
• マルチセッション管理機能
• 遷移履歴管理機能
• 動的パラメーター照会機能*など
ウィンドウ1
ウィンドウ2
ウィンドウ3
HTTPセッション
„ 開発チーム起点のアイディアでは限りがある
– フレームワーク開発チームだけでは、前述のよ
うなきめ細かい制御要件を網羅することは難し
い。また、それらの機能を展開チームで毎回設
計するのは勿体ない。
利用サイクル
Project A
提供サイクル
Components
アセット・ベース・サービスの展開
アセット・ベース・サービスの展開
• 開発チームによる展開ノウハウの収集
• 展開チームによるノウハウの再利用と改善
要求
展開チーム
開発チーム
PSU_temp_0522
8
© 2009 IBM Corporation
IBM Japan, Ltd.
中期 フレームワーク戦国時代
2000
2001 2002 2003
JMS
MVC
ログ
DB
SMTP
V1.0
2004 2005 2006 2007
DI / AOP
国際化
流量制限
PDF
Struts拡張
V4.0
コード監査
DAO生成
2008
Javaバッチ
Webサービス
Spring拡張 Ajax / REST
マスターメンテ生成
V5.0
2009
FormWave連携
V6.0
JSF拡張
V7.0
PSU_temp_0522
9
© 2009 IBM Corporation
IBM Japan, Ltd.
Struts
Struts
Strutsの台頭と機能のコンポーネント化
基盤部品の再利用
(Interceptor/LifecycleListenerを実装)
„ 様々なMVCフレームワーク実装の登場
生成
PDF
メール送信
SMTP
アクセス
JMS
アクセス
DB
ログ出力
流量制限
ロール・
チェック
J2EE
ユーザー管理
10
プラットフォーム
マルチセッション管理
PSU_temp_0522
遷移履歴管理
– DI/AOPのエッセンスを利用した基盤機能部品化の
仕組み。プラットフォーム毎にCPA Adapterを提供
することによって、基盤機能を異なるプラットフォー
ム上で再利用することができる。
– ConfigurationLoader:部品化の対象を基盤機能
に絞ったDIコンテナー
– Interceptor:Front Controllerの処理でAOPに近い
ことを実現するためのインターフェース(Filterに近
い)
– LifecycleListener:初期化/終了処理(JSR-250の
@PostConstructと@PreDestroyに近い)
サービス・スケジュール管理
„ Component Plug-in Architectureの誕生
業務アプリケーション
Component Plug-in Architecture
(CPA)
– Apache Struts上でWeb application components
が提供する機能が使いたい
– Web application componentsの内部コードの重複
を削減したい(リファクタリング)
機能のコンポーネント化
機能のコンポーネント化
CPA Adapter for Base Framework
Base Framework
■リクエスト・マッピング
■例外処理の仕組み
■入力データ・チェック
■入出力管理
■メッセージ・カタログ
■多言語対応
■モジュール分割
■リクエスト解析
■ファイル・ダウンロード
■ページング
■サブページ
■動的属性指定
Struts
JavaServer Faces
JAXJAX-WS
© 2009 IBM Corporation
IBM Japan, Ltd.
* Java言語で静的SQLを使用するための標準仕様
O/Rマッピング技術の活用
„ JDBCだけでは満たせない要求
DAO
XML
メソッド(SQL)
– 既存システムのSQLを再利用したい
メソッド(SQL)
– 実行前にSQLの品質保証をしたい
– DBアクセス・ロジックを共通化したい
SQLを利用したO/Rマッピング技術
SQLを利用したO/Rマッピング技術
„ DAO生成ツールの誕生
– DDL / SQLからDTO / DAOのソースコードを生成
するEclipse Plug-inツール。SQLを積極的に活用
することで、SQLのチューニングやSQLの発行タ
イミングを明示的に制御することができる。
– ツールにより、コード生成時の実装タイプ選択
(JDBC / SQLJ*)、SQLのEXPLAIN(DB2/Oracle)、
複数開発者によるDAOメソッド編集などが可能。
編集
DDL
-----------
入力
EXPLAIN
DAO
生成ツール
SQL
-----------
生成
DTO
DAO
JDBC
SQLJ
PSU_temp_0522
11
© 2009 IBM Corporation
IBM Japan, Ltd.
Spring
Spring
Framework
Framework
フレームワークのフルスタック化
クライアント層
„ ビジネス・ロジック開発スタイルの変化
– 画面分析駆動からドメイン(ビジネス)分析駆動へ
– J2EE 5層モデル・アーキテクチャーの普及
DI
DI (Dependency
(Dependency Injection)技術の活用
Injection)技術の活用
„ Spring Frameworkとの連携
– POJOによるビジネス・ロジックの実装、モックによ
る単体テスト、宣言的トランザクションが可能と
なった。
Form
生成
ビジネス層
XXX
+xxx()
YYY
+yyy()
ドメイン・モデル
実装
Business
Spring
• MVCフレームワークによる画面ロジック
• ドメイン分析によるビジネス・ロジック
• DAO生成ツールによるDBアクセス・ロジック
Form生成
Form生成
ツールで生成
ツールで生成
Frame
work
– Component-Scan機能(V2.5から)と国内外の知
名度を重視し、連携するDI実装としてSpring
Frameworkを採用。これにより、次の3つのロジッ
クを疎に結合。
プレゼンテーション層
インテグレーション層
DAO生成
DAO生成
ツールで生成
ツールで生成
DAO
生成
リソース層
PSU_temp_0522
12
© 2009 IBM Corporation
IBM Japan, Ltd.
Maven
Maven
Checkstyle
Checkstyle
FindBugs
FindBugs
SIサービス向けフレームワークならではの課題と工夫2 (1/2)
• 新プラットフォームと既存アプリケーションを仲
介するためのAdapterを常に提供
• 移行ガイドも整備
Adapterによる
互換性維持
アプリケーション
„ オフショア開発の増加
– 人手によるインスペクションではメリットが薄れる
Adapter
Adapter
Javaコード解析ツールとルールの再利用
Javaコード解析ツールとルールの再利用
PSU_temp_0522
13
• 実績のあるルールをFindBugs / CheckStyleへ
移植
• オフショア納品物の検収に活用
フレームワーク
フレームワークNew!
開発者
イ
ン
ショ
ク
ペ
ンス
フィ
ード
バ
Javaコード
解析ツール
検収
– 品質基準を満たす必要十分なルールが欲しい
自動生成
自動生成
(Form
(Form//DAO)
DAO)
手動作成
手動作成
コード再生成による互換性維持
コード再生成による互換性維持
• 内部で新たなAPIを利用するFormクラス / DAO
クラスを再生成
• 新規機能追加に伴う互換性維持に対する制約
を緩和
再生成による
互換性維持
バージョンup
ック
責任者
ト
Adapterの提供による互換性維持
Adapterの提供による互換性維持
フレームワーク
フレームワーク
ー
– 機能拡張や新機能追加も同時に求められる。
自動生成
自動生成
(Form
(Form//DAO)
DAO)
手動作成
手動作成
ポ
– APIの維持はもちろん、ミドルウェアの仕様変更の
吸収を求められることも。アプリケーションとの距離
が近い分、期待(義務)も大きい。
アプリケーション
レ
„ 求められる高い後方互換性
管理者
© 2009 IBM Corporation
IBM Japan, Ltd.
* http://www-06.ibm.com/jp/provision/no59/article5.html
SIサービス向けフレームワークならではの課題と工夫2 (2/2)
„ オープンソース・ソフトウェアの成熟と普及*
– 有用なオープンソース・ソフトウェア(OSS)はSI
サービスでも積極的に活用したい
方向付け
と選定
システム
OSS
– 活用によって生じる(潜在する)リスクは回避したい
OSS
– OSSの自律的な進化を認めつつ、対象システム
の(将来)構想と一貫するものを使いたい
選定されたOSSとの連携
選定されたOSSとの連携
• ライセンス形態に基づくリスク分析と標準検査
プロセス
• 前提動作環境を含んだオープン性の考慮
• 成熟度 / 普及度 / 情報発信の質・頻度の考慮
事前検証された組み合わせの提供
事前検証された組み合わせの提供
• 商用ソフトウェアとの組み合わせを含む、事前
検証によるリスク回避と検証コストの削減
• 組み合わせ実績の蓄積と改善
開発者
OSS
検証済みの
構成の提供
開発支援ツール
サービス
Spring
使用方法の
提示・規定
Commons
Maven
Checkstyle
FindBugs
JMeter
OSS利用の標準化を支援
OSS利用の標準化を支援
• 開発支援ツールや仕様書テンプレートによる
品質の統制と生産性の向上
PSU_temp_0522
14
Struts
Commons
© 2009 IBM Corporation
IBM Japan, Ltd.
後期 先進するフレームワーク
2000
2001 2002 2003
JMS
MVC
ログ
DB
SMTP
V1.0
2004 2005 2006 2007
DI / AOP
国際化
流量制限
PDF
Struts拡張
V4.0
コード監査
DAO生成
2008
Javaバッチ
Webサービス
Spring拡張 Ajax / REST
マスターメンテ生成
V5.0
2009
FormWave連携
V6.0
JSF拡張
V7.0
PSU_temp_0522
15
© 2009 IBM Corporation
IBM Japan, Ltd.
JMeter
JMeter
Java言語とバッチ処理
„ Javaバッチ処理に対する期待の高まり
– 開発言語を統一したい
– オンラインJavaシステムと部品を共用したい
– 既存Java資産を有効活用したい
16
ジョ
ョブ
ブ・
・
クラ
ライ
イア
アン
ント
ト
ジ
ク
PSU_temp_0522
IBM Tivoli Workload Scheduler
Shell
Webサービス
EJB
EJB
•
•
•
•
WSファ
WSファ
サード
サード
Browser
– 次のチャネルからロジックの呼び出しが可能。
管理コマン
管理コマン
ドド
WS
– Javaによるバッチ実行管理の基盤機能と
バッチ処理プログラムの実行制御用APIを提
供。開発者はロジック開発に集中することが
できる。
TWS連携
TWS連携
Shell
„ Javaバッチ・フレームワークの誕生
TWS
フレームワーク化による開発支援
フレームワーク化による開発支援
設定
ファイル
Bootstrap
Bootstrap
コント
コント
ロー
ロー
ラー
ラー
エグゼ
エグゼ
キュー
キュー
ター
ター
Web管理
Web管理
コンソール
コンソール
Logic
Logic
JVM/Application Server
リポジトリー
EJBクライ
EJBクライ
アント
アント
JVM/Application Server
DBMS
© 2009 IBM Corporation
IBM Japan, Ltd.
Webサービスでの基盤機能再利用
サービス・プロバイダー
„ Webサービスの普及と課題
– 高負荷を回避して安定したサービス
を提供したい
– サービスを稼動させた状態で部分的
に保守したい
JAX-WSランタイム
Webサービス
Adapter 流量制限
Web
サービス
ハンドラー Adapter
Adapter サービス・スケジュール管理
Webサービスでの基盤機能再利用
Webサービスでの基盤機能再利用
„ Webサービス・ハンドラーの誕生
– 次のシステム基盤機能を再利用する
ことが可能
• サービス・スケジュール管理機能
• 流量制限機能
サービス
リクエスター
流量制限
サービス・スケジュール管理
– CPA(前述)の思想を受け継いだシス
テム基盤機能の実行環境を提供。
Webアプリケーションとして実績のあ
る部品を再利用することが可能に。
SOAP/HTTP
JMSアクセス
Service
Logic
SMTPアクセス
PDF作成
ログ出力
Webサービス・ハンドラー
Webサービス・ハンドラー (CPA Adapter)
JAXJAX-WS
PSU_temp_0522
17
© 2009 IBM Corporation
IBM Japan, Ltd.
*オプション提供
Dojo
Dojo
Toolkit
Toolkit
リッチ・クライアント技術への対応
„ ユーザーの不満
– ブラウザー(HTML)の制約によって思い通り
に配置できない入力項目
サジェストリスト
入力チェック
– キーボードのショートカットが使えない(マウス
中心の)画面操作
– 端末やVBに比べて頻繁な画面遷移
リッチ・クライアント技術の活用
リッチ・クライアント技術の活用
マスク入力
カレンダー
カンマ区切り挿入
„ リッチ・クライアント技術の採用
– 下記のリッチ・クライアント技術の採用により
課題を解決。
• Appletとの連携インターフェース提供
• 入力支援JavaScriptライブラリーの提供*
• Ajaxライブラリー(Dojo Toolkitなど)との連
携インターフェース提供
スプレッドシート
– 各技術が提供している機能は画面の装飾よ
りも入力の支援が中心。ユーザーの業務効
率向上に貢献。
PSU_temp_0522
18
© 2009 IBM Corporation
IBM Japan, Ltd.
Ease of Development (EoD)の時代
„ 複雑化するフレームワークの導入・設定
– フレームワークの高機能化に伴う設定ファイ
ルの肥大化
– 決まりきったアプリケーションはもっと簡単に
作りたい
設定の簡略化とアプリケーションの定型化
設定の簡略化とアプリケーションの定型化
„ Ease of Developmentを目指して
– Spring Framework V2.5のcomponent-scan
とannotationの活用による設定の簡略化。
– 典型的な開発フォルダー構成を生成する機
能(Scaffold)は現在開発中
„ アプリケーション生成ツールの提供
– DDLやデータ定義からマスター・メンテンナン
ス・アプリケーションを生成するツールを提供
– DDLの読み込み部はDAO生成ツールの内部
機能を再利用
・・・
<bean id="xxx"
class="XXX">
<property name="yyy"
ref="yyy"/>
</bean>
<bean id="yyy"
class="YYY"/>
・・・
@Service
public class XXX {
簡略化 @Autowired
public void setYYY(YYY y) {
・・・
@Component
public class YYY {
・・・
}
public class XXX {
・・・
}
public class YYY {
・・・
}
DDL
-----------
データ定義
入力
マスター・メンテナンス
生成ツール
X
生成
マスター・メンテナンス
マスター・メンテナンス
フレームワーク
フレームワーク
PSU_temp_0522
19
© 2009 IBM Corporation
IBM Japan, Ltd.
JavaServer Facesでの基盤機能再利用
流量制限
ロール・
チェック
J2EE
ユーザー管理
– Java EE V1.5より、Enterprise Javaの世界
におけるMVCフレームワークの標準に
– これまで求められてきたきめ細かい制御機能
はやはり必要
JavaServer
JavaServer Faces上での部品再利用
Faces上での部品再利用
マルチセッション管理
サービス・スケジュール管理
„ JavaServer Faces (JSF)の普及
PSU_temp_0522
20
JMSアクセス
Session
Bean
SMTPアクセス
Managed
Bean
PDF作成
ログ出力
CPA Adapter for JSF
„ CPA Adapter for JSFの誕生
– JSF上でシステム基盤機能を利用するための
実行環境を提供。Base Framework / Struts
のWebアプリケーションとして実績のある部
品を再利用することが可能に。
ManagedBeanの呼び出し前後で、流量制限
などのシステム基盤機能を実行。
– JSFおよびJava EE 5のDI機能が利用可能と
なったことにより、EJB (SessionBean)がより
使いやすくなった。
– JSF 1.2 (Java EE 5)では依然XMLによる
ManagedBeanの宣言が必要。Annotationに
よる宣言が可能なJSF 2.0が待望される。
injection
JavaServer Faces
RestoreView
ApplyRequests
ProcessValidations
RenderResponse
InvokeApplication
UpdateModelValue
・・・
<managed-bean>
<managed-beanname>xxx</managedbean-name>
<managed-beanclass>XXX</managedbean-class>
<managed-beanscope>session</managed
-bean-scope>
</managed-bean>
・・・
@ManagedBean(name=“xxx”)
簡略化 @SessionScoped
public class XXX {
・・・
}
© 2009 IBM Corporation
IBM Japan, Ltd.
まとめ
„ Web application componentsは多くの技術的課題に遭遇し、システム開発
に必要な部品とツールを提供してきました。
„ StrutsやSpring Frameworkなど、有力なオープンソース・ソフトウェアの台
頭やJava SE / Java EEをはじめとする標準技術の進化の中でも、それらの
部品やツールは様々な形で再利用され続けています。これはソフトウェアのコ
ンポーネント化と再利用が、長期に渡って価値を提供し続ける重要なポイント
であることを示唆しています。
„ 今後も技術的課題の解決と再利用を推進し、よりSmartなソフトウェア開発を
実現していきます。
PSU_temp_0522
21
© 2009 IBM Corporation
Fly UP