what's new jsf 2.2 & cdi & el · cdiとは contexts and dependency injection(cdi)...

41
CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved What's New JSF 2.2 & CDI & EL

Upload: others

Post on 25-Mar-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

What's New JSF 2.2 & CDI & EL

Page 2: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

自己紹介

加藤田 益嗣(Masuji Katoda)

アイエックス・ナレッジ株式会社 サービスインテグレーション事業部

ICTソリューション部

事業内容 コンサルティング

システム開発

システムマネージメント

システム検証

Page 3: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFとは

Page 4: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFとは

JavaServer Faces(JSF)

Java標準のWebアプリケーションユーザインターフェースフレームワーク

JavaでWeb画面開発を行う為の仕様

Page 5: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの仕組み

コンポーネントベース開発

一般的なStrutsやRailsのようなWebのリクエストベースの開発ではなく画面に配置したコンポーネントに処理を紐付けるコンポーネントベースの開発

ボタンや入力項目と処理を紐付ける

VBのような開発

ボタン 処理

Page 6: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの現状

JSF2.0(2009年)

Java EE 6リリース

Facelets、Ajax、ブックマーカビリティ、複合コンポーネント、アノテーションによる宣言、CoC

JSF2.2(2013年3月)

Java EE 7リリース

Page 7: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSF2.2で追加された機能

Page 8: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSF2.2で追加された機能

1.HTML5サポート

HTML5で追加されたタグや属性に対応

パススルーアトリビュートが導入されdata-で始まるような未確定なタグ属性についても出力可能

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://xmlns.jcp.org/jsf/html"

xmlns:p="http://xmlns.jcp.org/jsf/passthrough">

<h:form>

<h:inputText value="#{bean.value}" p:placeholder="Enter text"/>

</h:form>

</html>

そのまま出力される

Page 9: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSF2.2で追加された機能

2.リソースライブラリコントラクト

テンプレートやスタイルを切り替える仕組み

リソースの配布や切替が容易になる

META-INF/contracts/

layout_a/

style.css

layout_b/

style.css

<application>

<resource-library-contracts>

<contract-mapping>

<url-pattern>/*</url-pattern>

<contracts>layout_a</contracts>

</contract-mapping>

</resource-library-contracts>

</application>

Page 10: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSF2.2で追加された機能

3.Facesフロー

画面遷移をフローというまとまりとして管理する仕組み

特定の画面遷移中にFlowScopeという対話スコープのようなものが提供される

ショッピングカートのような画面で利用

META-INF/

flow/

first.xhtml

next.xhtml

end.xhtml

<flow-definition id="flow">

<view id="flow">

<vdl-document>

/flow/first.xhtml

</vdl-document>

</view>

</flow-definition>

Page 11: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSF2.2で追加された機能

4.ステートレスモード

サーバ側でコンポーネントツリーを保持しない

アクセスの度にコンポーネントツリーを作り直す

ステートレスな画面開発が可能 <html xmlns="http://www.w3.org/1999/xhtml"

xmlns:h="http://xmlns.jcp.org/jsf/html"

xmlns:f="http://xmlns.jcp.org/jsf/core">

<f:view transient="true">

<h:body></h:body>

</f:view>

</html>

f:vewで囲み

transient=“true”を指定する

Page 12: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSF2.2で追加された機能

その他の機能

ファイルアップロード機能の提供

ファイルのアップロードに対応

Ajaxによるファイルアップロードも可能

CSRF対策

ViewActionの追加

カスタムコンポーネントアノテーション対応

Page 13: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの基本的な仕組み

Page 14: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの基本的な仕組み

コンポーネントツリー

html

body

form

input

input

button

html

body

form

input

input

button

Facelets

Bean value1 value2 exec()

SessionBean

Entity

HTTP

ブラウザ

サーバ

Page 15: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの基本的な仕組み

ライフサイクル

1.RestoreView 2.Apply Request

Values

3.Process

Validations

4.Update Model

Values

5.Invoke

Application

6.Render

Response

Page 16: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの基本的な仕組み

処理シーケンス ブラウザ サーバ

1、6

1、2、3、

4、5

Page 17: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの基本的な仕組み

JSFを構成するもの

画面

Facelets

EL

サーバ

バッキングビーン(ManagedBean or CDI)

ビジネスロジック(SessionBean and Entity)

Page 18: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの基本的な仕組み

画面

Facelets

FaceletsというXHTMLベースのテンプレートエンジンを使用する

コンポーネント(タグ)を配置して画面を設計する

EL

値のマッピングにはELを使用する

Page 19: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの基本的な仕組み

サーバ

バッキングビーン

値や処理を制御するJavaクラス

ManagedBeanまたはCDIとして作成する

ビジネスロジック

EJBやエンティティを使用したビジネス層

バッキングビーンから呼び出してビジネスロジックを処理する

Page 20: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

ELについて

Page 21: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

ELとは

Expression Language(EL)

演算の結果や値の参照結果を返却する簡易記法

テンプレートでJavaを記載するとコードが冗長になってしまうので、EL式を用いる

「#{式}」で記載する

EL2.2(Java EE 6)→ EL3.0(Java EE 7)

HTML インスタンス

出力

#{インスタンス.メソッド}

Page 22: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

ELの機能

演算子、

様々な演算子が利用可能

算術演算子 +、-、*、/、%、div、mod

関係演算子 ==、!=、<、>、<=、>=、eq、ne、lt、gt、le、ge

論理演算子 &&、||、!、and、or、not

三項演算子 (a ? b : c)

empty

メソッド呼び出し

Java EE 6からはEL式でメソッドの参照が可能

#{hoge.action(val)}

Page 23: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFとEL

値の出力

インスタンスを参照して結果を出力する

#{hoge.name}

カスタムコンポーネント

カスタムコンポーネントの属性値を指定する

<h:inputText value=“#{hoge.name}” />

Page 24: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFとEL

オブジェクトの参照

ELでは暗黙的なオブジェクトが定義され利用可能

facesContext、param、paramValues、header、headerValues、cookie、initParam、application、component、flash、request、resource、view、cc

requestScope、sessionScope、applicationScope、flowScope、viewScope

バッキングビーンの参照

Page 25: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

EL3.0のアップデート

Lambda式 ELでLambda式が使用可能(Java SE 8を待たずに使用可)

コレクションオペレーション コレクションに対してfilter、map等のストリームパイプライン

が使用可能

スタティックフィールド・メソッド参照 Enumの参照

Page 26: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

EL3.0のアップデート

セミコロンオペレータ 「;」で複数の処理が記載

アサインメントオペレータ 「=」で値の代入が可能に

文字列連結オペレータ 「+=」で文字連結が可能に

Page 27: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

CDIについて

Page 28: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

CDIとは

Contexts and Dependency Injection(CDI)

インスタンスをインジェクト(注入)する仕組み

EJBやJSF等のいろんな仕様にまたがって使用される。

CDI1.0(Java EE 6)→ CDI1.1(Java EE 7)

インスタンス

CDI インジェクト

Page 29: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

CDIの機能

依存性の注入(DI) クラスインスタンスをインジェクトする機能

@Inject

ライフサイクルの管理 インスタンスのライフサイクル管理

@RequestScoped、 @ConversationScoped、 @SessionScoped、@ApplicatonScoped、@Dependent

横断的な処理(AOP) ログ出力などの横断的な処理の追加

@Interceptor

Page 30: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFとCDI

JSFとCDIの連携

CDIのクラスに@Namedアノテーションを付加する

FaceletsからEL式で参照する

@Named

public class Hoge {

public String getName(){}

#{hoge.name}

Page 31: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

CDI1.1のアップデート

他の仕様との親和性の向上

JSFでViewScopedやFlowScopedが使用できるようになった

JSFのコンバータやバリデータで@Injectが使える

JTAで定義されている@Transactionalが使用できる

デフォルト有効化

以前はbeans.xmlを配置することでCDIが有効になっていたが、なにも配置しなくても有効になるようになった。

Page 32: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの機能

Page 33: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの機能(画面)

Faceletsテンプレーティング(ui)

http://xmlns.jcp.org/jsf/facelets

テンプレートや繰り返し処理を提供するコンポーネント

HTMLベーシック(h)

http://xmlns.jcp.org/jsf/html

bodyやformタグなどHTMLの基本的なタグを拡張したコンポーネントを提供する

Faceletsコア(f)

http://xmlns.jcp.org/jsf/core

コンバータやバリデータ、Ajax等、Faceletsに対するサポート的な機能を提供する

Page 34: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの機能(画面)

テンプレート機能

Apache Tilesのような画面のテンプレート機能を提供する

テンプレート(template.xhtml)

利用側(templateClient.xhtml)

<div id="content">

<ui:insert name="content"></ui:insert>

</div>

<ui:composition template="template.xhtml">

<ui:define name="content">

content

</ui:define>

</ui:composition>

テンプレート名を指定

Page 35: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの機能(画面)

複合コンポーネント(cc) http://xmlns.jcp.org/jsf/facelets

複合コンポーネントを開発する為に提供されるコンポーネント

パススルーアトリビュート(p) http://xmlns.jcp.org/jsf/passthrough

任意のHTMLタグ属性の出力方法を提供する

パススルーエレメント(jsp) http://xmlns.jcp.org/jsf

HTMLフレンドリーなマークアップ方法を提供する

デザイナーとの協業がやりやすくなる

Page 36: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFの機能(サーバ)

outcome値による画面遷移

バッキングビーンで返す文字列で画面遷移先が決まる

「index」という文字列を返すと「index.xhtml」に遷移する

FacesContext

FacesContextインスタンスからSessionやRequestを始めとする大抵の情報にアクセスできる

Page 37: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFのメリット・デメリット

Page 38: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFを使用するメリット

わかりやすい開発

コンポーネントベースの開発のため画面部品と処理の紐付けがわかりやすい。

Javaを基本とした開発が可能(JavaScriptが隠蔽化されあまり使用しない)

再利用性

画面コンポーネントの部品化やCDIを利用している為ロジックの部品化がしやすい

後方互換性の高さ

Java EE 標準であるため仕様の信頼性が高い

後方互換性がしっかりしている

Page 39: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

JSFを使用するデメリット

セッションを前提とした構成 サーバセッションを前提としたサーバ構築が必要

ステートレスモードはあるがバッキングビーン自体はサーバセッションを使用する

動的な画面生成に弱い コンポーネントツリーをサーバに保有する為、クライアント側

での動的な画面生成は難しい

パフォーマンス コンポーネントを大量に配置するとパフォーマンスが劣化する

内部実装の改善により解消されつつある

Page 40: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

まとめ

Page 41: What's New JSF 2.2 & CDI & EL · CDIとは Contexts and Dependency Injection(CDI) インスタンスをインジェクト(注入)する仕組み EJBやJSF等のいろんな仕様にまたがって使用される。

CONFIDENTIAL Copyright(c) 2013 IX Knowledge Inc. All Rights Reserved

まとめ

JSF2.2によって得られるもの

新規機能も多いが、CDIとの相性向上、ファイルアップロード、ステートレスモードなど開発するに当たって細かい機能改善が多く取り込まれている。

まだ新機能部分にはバグも多く、対応サーバも少ないので2.2を見越した上で直近は2.0で開発するのが現状の選択肢

JSFを使ってきて思うこと

JSF1.2の時代には冗長なコード、必要な機能の欠如など足りない点が多かったが、2.0でかなり別物となった。

JSFとNetbeanを使用することでかなり生産性が向上する