Java EEは

Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
IT課題の解決に向けた
Java EEセントリックな
開発標準化の勘所
日本オラクル株式会社
コンサルティングサービス事業統括
ソリューションマネジャー
大橋 勝之
Java Day Tokyo 2015
2015年4月8日
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。
また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むこと
はできません。以下の事項は、マテリアルやコード、機能を提供することをコ
ミットメント(確約)するものではないため、購買決定を行う際の判断材料にな
さらないで下さい。オラクル製品に関して記載されている機能の開発、リリース
および時期については、弊社の裁量により決定されます。
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
4
自己紹介
大橋 勝之
[email protected]
日本オラクル株式会社
コンサルティングサービス事業統括
• 1998年からサン・マイクロシステムズでJavaコンサルティングに
従事、2010年6月に日本オラクルへ移動
• Javaフレームワーク開発を含むJava開発標準化支援を主に担当
• 2001年、2002年、2012年 JavaOne Japan スピーカ
• 2013年 Java Day Tokyo スピーカ
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
アジェンダ
1
企業におけるITの課題とこれまでの取組み
2
Java EEセントリックな開発標準化
3
開発標準化でJava EEをうまく使う勘所
4
まとめ
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
6
企業におけるITの課題と
これまでの取組み
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
7
長い間、取り組んでいるのに、
IT課題の改善がなかなか進まない
• アプリケーション開発の生産性が上がらず、品質も
安定しない
• アプリケーションの運用管理に手間とお金がかかる
• 社内の技術者育成が進まず、リテンションも難しい
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
8
課題解決に向けた取組みとして
Java開発標準化が各社で行われた
• 2000年代初頭のJ2EE開発標準化ブーム
• エンドユーザ企業、開発ベンダ企業が競って独自の
フレームワークを開発してプロジェクトに適用
• 多数の独自フレームワーク(aka 俺様FW)が乱立し、
現在も継続利用されているケースも多い
1995
2000
J2EE
1.2
Java誕生
2005
J2EE J2EE
1.3
1.4
J2EE開発標準化
ブーム
Java
EE5
2010
Java
EE6
2015
Java
EE7
J2EE開発標準の
継続利用
2020
Java
EE8
(予定)
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
9
サードパーティ製フレームワークで
J2EEの不足機能を補完するアプローチ
 独自フレームワークが提供する
非標準なAPIベースに業務アプリ
ケーションを開発
業務アプリケーション
業務共通部品
サードパーティ製フレームワーク
(OSS+カスタム開発)
アプリケーションサーバ (J2EE)
 フレームワーク担当チームが
アプリケーション標準化推進と
フレームワークのメンテナンスを
手厚く対応
Java VM (Java SE)
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
10
より一層のITコスト削減が要求される昨今、
独自フレームワーク路線の継続は難しい状況に
• ユーザ企業と開発ベンダがそれぞれ所有するフレームワークの
ミスマッチにより十分なコスト削減が実現できない
- ユーザ企業のフレームワークで開発すれば開発コスト増加
- 開発ベンダのフレームワークで開発すればメンテナンスコスト増加
• フレームワーク担当チームのオペレーションコストが大きい
- JavaやAPサーバ、利用するオープンソース製フレームワークの
バージョンアップ対応やセキュリティ問題への対応
- 社内開発プロジェクトのフレームワーク適用支援
- 社内スタッフや協力会社スタッフの育成
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
11
オープンソース製品へのロックインの
リスクが露呈し始めた
• ベース技術の陳腐化が開発生産性
向上を阻害する要因に
• プロジェクトのEOLやセキュリティ
脆弱性問題への対応によるコスト増
• バージョンアップ時の動作検証等の
追加工数発生によるコスト増
https://struts.apache.org/struts1eol-announcement.html
https://www.ipa.go.jp/security/ciadr/vul/20140417-struts.html
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
12
Java EEセントリックな
アプリケーション開発標準化
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
13
オープンソースプロジェクトの成果を取りこんで
Java EEはフルスタックのフレームワーク機能を提供
熟成
利用拡大に向けた
大幅な機能の進化
Q3 2016
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
14
サードパーティ製フレームワークでの補完は不要化し、
進化したJava EEを「素で使う」構成へシフト
J2EE 時代
Java EE時代
業務アプリケーション
業務アプリケーション
業務共通部品
業務共通部品
サードパーティ製フレームワーク
(OSS+カスタム開発)
アプリケーションサーバ (J2EE)
Java VM (Java SE)
アプリケーションサーバ
(Java EE)
Java VM (Java SE)
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
15
Java EE標準フレームワーク機能を利用して
J2EE時代からの課題を解決
• ユーザ企業と開発ベンダが同じJava EE標準フレームワークを
利用することによってミスマッチを解消
• フレームワーク機能の実装はJava EEアプリケーションサーバ
製品に包含され、フレームワーク単体のメンテナンスが不要化
• アプリケーション開発に必要な技術範囲がJava EE標準技術で
適正化され、一般書籍や社外の技術コミュニティの情報を活用
した技術者育成や問題解決が可能に
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
16
アプリケーション開発/保守の内製力強化に向けた
開発標準の再整備は今が絶好のタイミング
 多くの企業がJava EEによる開発標準再整備を実施/計画中
- 自社システムに関する知識やスキルの空洞化を防止
- 社内IT技術者育成ノウハウの蓄積
 Java EE7で標準化されたバッチ処理APIを利用したメイン
フレームのダウンサイジング促進
 Java EE7商用アプリケーションサーバが出揃う見通し
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
17
開発標準化で
Java EEをうまく使う勘所
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
18
Java EEは「標準」と「後方互換性」を最大の
メリットとする安定したプラットフォーム
• 特定の企業や団体に非依存
• ハードウェアやOSを選ばずに実行可能
• 企業向けアプリケーションで共通利用する機能を標準API化
• 後方互換性を維持したバージョンアップ
• 標準仕様に基づいた複数の実装から利用製品の選択が可能
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
19
安定したJava EEプラットフォームの上で
アプリケーションのアーキテクチャを均質化
• 各アプリケーションがJava EEマルチティアモデルに準拠し、
同じ粒度・同じ役割でコンポーネントを分割
• コンポーネント間の関連を疎結合化してモジュール性を担保
• Java EE標準技術を利用して各コンポーネントの実装も均質化
クライアント
プレゼンテー
ション
ビジネス
ロジック
インテグレー
ション
リソース
アプリケーション
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
20
Java EE標準APIベースの開発で
アプリケーションを長寿命化
Java EE
標準API
3rd Party アプリ
部品
FW
非標準API
脱
3rd Party
FW
Java EE
アプリ
部品
標準API
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
21
サードパーティ製品は疎結合利用して
ロックインを回避
Java EE
アプリ
部品
3rd Party
LIB
サードパーティ製ソフト
ウェア利用のリスクに
対する備え
 利用を局所化
3rd Party
LIB
 疎結合化
3rd Party
LIB
疎結合
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
22
Java EE標準アーキテクチャは
JSF+EJB+JPAで決まり!
<<JSF Facelet>>
Web Page
<<POJO/
CDI Bean>>
Backing Bean
<<EJB/JTA>>
Business
Logic
<<JPA/JDBC>>
Data Access
Object
<<POJO/
JPA Entity>>
Java EE CDIコンテナ
Business
Object
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
23
各コンポーネントの作りのバラつきを抑えれば、
標準化の効果は更に上昇
<<JSF Facelet>>
Web Page
<<POJO/
CDI Bean>>
Backing Bean
<<EJB/JTA>>
Business
Logic
<<JPA/JDBC>>
Data Access
Object
<<POJO/
JPA Entity>>
Java EE CDIコンテナ
Business
Object
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
24
各コンポーネントの作りをパターン化して再利用し、
もう一段踏み込んだレベルでの標準化を実現
• Java EE標準技術ベースにコンポーネントの設計パターンを
整備し、使い分けのガイドと共にカタログ化
• パターンの再利用による設計を推進してアプリケーションの
構成を均質化すると共に、実装時の技術リスクを緩和
• パターン名を利用したコミュニケーションにより、プロジェク
ト関係者間でのアーキテクチャ理解の共有を促進
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
25
パターンを利用した標準化を
「複数画面を遷移するリクエスト処理の実装」を
例として考えてみる
メニュー
画面
入力画面1
入力画面2
確認/実行
画面
結果画面
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
26
各画面は共通のテンプレートで構成を共通化
Templated Viewパターン
ヘッダ
Facelet
フッタ
Facelet
uses
メニュー
画面
Facelet
ヘッダ
uses
uses
uses
入力画面1
Facelet
コンテンツ
Facelets
テンプレート
uses
uses
入力画面2
Facelet
フッタ
uses
確認/実行
画面
Facelet
結果画面
Facelet
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
27
アクションベースのフレームワークに慣れた人が好む
画面とバッキングビーンが1対1の構成
View Scoped Backing Bean パターン
メニュー画面
Backing
Bean
入力画面1
Backing
Bean
@ViewScoped
入力画面2
Backing
Bean
• 画面毎にバッキングビーンを作成
• 開発量多く、画面構成変更時の影響大
確認/実行
画面
Facelet
binds
@ViewScoped
実行画面
Backing
Bean
結果画面
Facelet
navigates
@ViewScoped
binds
navigates
@ViewScoped
binds
入力画面2
Facelet
navigates
binds
入力画面1
Facelet
navigates
メニュー
画面
Facelet
binds
@ViewScoped
結果画面
Backing
Bean
Business
Logic
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
28
関連する複数の画面で
バッキングビーンを共有して開発量を削減
binds
navigates
navigates
binds
入力画面1
Facelet
入力画面2
Facelet
binds
@SessionScoped
Backing
Bean
Business
Logic
確認/実行
画面
Facelet
binds
結果画面
Facelet
navigates
メニュー
画面
Facelet
navigates
Session Scoped Backing Bean パターン
binds
• 設計/実装は容易だが、
セッション肥大化のリスク有
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
29
関連する複数の画面でバッキングビーンを共有し、
画面フローに沿ってスコープの開始/終了を制御
binds
navigates
navigates
binds
入力画面1
Facelet
@Begin
入力画面2
Facelet
binds
確認/実行
画面
Facelet
binds
@ConversationScoped
Backing
Bean
Business
Logic
結果画面
Facelet
navigates
メニュー
画面
Facelet
navigates
Conversation Scoped Backing Bean パターン
binds
@End
• 明示的にスコープを制御
• 二度押し防止
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
30
横断的関心事をインターセプタに分離し、
CMTを利用するEJBに業務処理を実装
Cross-Cutting Separation EJB パターン
@Interceptor
Cross
Cutting
Backing
Bean
{TX Attribute = REQUIRED}
bound by
annotation
calls
@Stateless
Business
Logic
※ CMT:コンテナ管理トランザクション
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
31
好ましくない構成は
アンチパターンとして明示的に提示
Command-Pattern Based
Service Invocator EJB アンチパターン
@Stateless
Backing
Bean
creates
calls
Command
Business
Logic
Invocator
creates/calls
Business
Logic
uses
• 業務処理の呼出しにコマンド
パターンを利用
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
32
ビジネスオブジェクトをJPAエンティティ化し、
EJBで実装したDAOがEntity Managerに処理を委譲
JPA Encapsulation DAO パターン
{TX Attribute
= MANDATORY}
@Stateless
Business
Logic
calls
Data
Access
Object
{Persistence Context Type
= TRANSACTION}
calls
<<JPA>>
Entity
Manager
uses
uses
@Entity
uses/creates
Business Object
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
33
インターセプタを利用してシステム状況を動的に監視
Monitoring Agent Interceptor パターン
Backing
Bean
@Interceptor
Cross
Cutting
Business
Logic
EJB
@MXBean
JMX
Interface
JMX
calls
Client
fires
implements
CDI
Event
notifies
JMX
Impl
@Observes
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
34
インターセプタの振舞いを外部から動的に制御
Dynamic Controllable Interceptor パターン
Backing
Bean
@Interceptor
Cross
Cutting
@Observes
Business
Logic
EJB
JMX
Interface
JMX
calls
Client
implements
notifies
CDI
Event
@MXBean
fires
JMX
Impl
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
35
パターンの組み合わせでアプリケーション構成を
記述し、更にパターン化して再利用
uses
Cross-cutting
Separation
EJB
uses
calls
Monitoring
Agent
Interceptor
calls
Conversation
Scoped
Backing Bean
calls
Templated
View
calls
Java EE Standard Web Application パターン
JPA
Encapsulation
DAO
uses
JPA Entity
Business
Object
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
36
非機能要件の実現方式もパターン化
Scalability & High Availability
Application Deployment パターン
:アプリケーションサーバ
:アプリケーションサーバ
WAR
:クライ
アント
:ロード
バランサ
:アプリケーションサーバ
WAR
Java EE
:アプリケーションサーバ
WAR
Standard Web
Java
EE
Application
Standard Web
WAR
Java
EE
Application
Standard Web
Java
EE
Application
Standard Web
Application
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
37
運用管理のツールや対応手順もパターン化
JFR Aggressive Health Check パターン
Java EEアプリ
App Server
Oracle Java SE
(JDK)
GUI
解析
Java
Flight
Recorder
常時
記録
アプリケーション担当
②解析
ファイル
出力
Java Mission Control
サポートエンジニア
①ファイル
送付
③対応
指示
インフラ担当
フィールド
エンジニア
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
38
パターンベースの設計/実装をサポートする
ツールや部品を開発フレームワークとして整備
• 標準アーキテクチャガイド、開発ガイド
• パターンカタログ、パターン利用ガイド
• リファレンスプログラム
• 実装用テンプレート/スケルトン、コード自動生成ツール
• 共通部品ライブラリ
• 自己学習用ハンズオンチュートリアル
どのタイミングで何を提供するのがよいか、
戦略的な整備計画の立案が必要
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
39
コンポーネントベースのアーキテクチャでは
UI部品の貼り付けによるサービスの再利用が可能
• UI部品に紐づく機能が
そのまま利用可能に
UI部品
画面
Backing
Bean
Business
Logic
Database
Access
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
40
よく使われる機能をJSF複合コンポーネントで
共通UI部品化するのが開発生産性向上に効果的
ログイン・コンポジットコンポーネント
ユーザID
認証/認可
Backing
Bean
パスワード
ログイン
<h:body>
<fw:Login successPage="/index"/>
</h:body>
ログインページには
タグ追加のみ
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
41
パターンベースの技術習得で
技術者の育成を大幅にスピードアップ
ひと通りのJava研修を受講しても、
すぐにはアプリケーション開発の戦力にならない
 要素技術の知識はついたが、どう使えば良いのかわからない
 非機能要件の実現方法はJava研修の範囲外
パターンベースの技術習得
1. よく利用するパターンの組み合わせの理解から始め、
2. 利用するパターンの設計/実装で使われている技術を深堀りし、
3. 関連する技術や代替技術へ学習範囲を拡大
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
42
まとめ
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
43
IT課題の解決に向けた
Java EEセントリックな開発標準化の勘所
• Java EE標準機能をダイレクトに利用して、Java EEの
安定したプラットフォームのメリットを最大活用
• Java EE要素技術の利用方法をパターン化して再利用し、
アプリケーション構成の均質化と開発リスク緩和を実現
• パターンベースの設計/実装をサポートするツールや部品を
開発フレームワークとして戦略的に整備
• パターンベースの技術習得で効率的に技術者を戦力化
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
44
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.