xpagesday 2016 「xpagesでjava開発するぞ!」
TRANSCRIPT
自己紹介
• ケートリック株式会社 リード IT スペシャリスト米原 和之(よねはら かずゆき)
• 最近は Xpages 漬けの毎日です。• 「週に 1 度はテニスを! 年に1度はフルマラソンを! 」
アジェンダ▪ XPages で Java を利用する背景
▪ XPages で Java を利用するメリットとデメリッ
ト
▪ Java による MVC 開発
▪ XPages の基盤技術である JavaEE JSF の理解
▪ デモ アプリの内容
▪ デモ
XPagesで Javaを利用する背景XPages+SSJS で開発を続けていくと直面する悩み・・・
SSJS 使っていると Java の知識を必要とする場面に遭遇する。
フレームワークや開発手法が確立されていないため、開発者によって書くコードがバラバラ。SSJS は Java をラッピングしてるので比較すると遅いらしい・・・
XAgent なんて Java のコードで意味不明・・・
MVC で解決?
▪ NSF から他の DBMS へ代替えが可能。
▪ MVC モデルに準拠した開発が出来る。
→ 保守性が増す、 再利用性が高まる、 開発の分業がしやすくなる、等々。
▪ (通常)パフォーマンスが良くなる。
▪ ユニットテストの実施。
▪ 基盤技術の JavaEE/JSF 等を学ぶことによって XPAGES への理解がさらに
深まる
▪ “XPages ってニッチな言語使って開発してる”、なんて悲観的にならなく
て良くなる!!
JavaEE/JSF は本当にすごい!それを技術基盤にしている XPages もすご
い!
XPagesで Javaを利用するメリット
【デメリット】
▪ Java と Notes/Domino に精通する開発者を揃えるのが難しい。
▪ 自分自身が Java による開発を理解する必要がある。
▪ XPages の基盤技術である JSF のバージョンが古い。
IBM が JSF1.1 をベースにかなりカスタマイズに手を加えているた
め Java8 サポートになっても JSF2.0 関連の対応は見込めない?
(書店にいくと JSF2.0 関連の本ばかり)
XPagesで Javaを利用するデメリット
JavaによるMVC開発
ModelView
Controller
データの仕組みや構造を定義、
ビジネスロジック担当
View と Model を制
御
表示、入出力 部分を担当
Clie
nt
Database
リクエスト
返答
▪ JSF アプリケーションでの MVC 構造の理解XPagesの基盤技術である JavaEE JSFの理解
ModelView
Controller
Clie
nt
Database
リクエスト
返答
FacesServlet
Facelets Managed Bean
▪ JSF での MVC 構造を XPages に置きかえると、、、XPagesの基盤技術である JavaEE JSFの理解
ModelView
Controller
Clie
nt
NSF
リクエスト
返答
FacesServlet
FaceletsXPages Managed Bean
▪ いろいろな Bean・ Java Bean・ Backing Bean・ Managed Bean
XPagesの基盤技術である JavaEE JSFの理解
Java Bean
Managed Bean(Backing Bean)
JSF
faces-config.xml に定義されるのがManaged Bean
Model・引き数なしのコンストラクタを持つ・プロパティを持つ (setter/getter)
▪ いろいろなスコープ
・ ApplicationScope・ SessionScope・ ViewScope・ RequestScope
XPagesの基盤技術である JavaEE JSFの理解Xpages でおなじみの Scope はJSF フレームワークによって提供されている機能の1つfaces-config.xml に ManagedBean を定義する際に Scope を使い永続性を合わせて定義する。
Model
▪ Facelets
XPagesの基盤技術である JavaEE JSFの理解
JSF の Facelets の記述
例XPages の記述例
≒ XPages
<h:inputText Value=“#{EmployeeBean.number}” /><h:inputText Value=“#{EmployeeBean.name}” /><h:commandButton value=“ 送信” />
<xp:inputText value=“#{document1.number}” /><xp:inputText value=“#{document1.name}” /><xp:button value=“ 送信” />
View
▪ Facelets と Managed Bean の関係
XPagesの基盤技術である JavaEE JSFの理解
登録名前ID
<h:inputText Value=“#{EmployeeBean.number}” /><h:inputText Value=“#{EmployeeBean.name}” /><h:commandButton value=“ 送信” />
Facelets( Xpages)
public class EmployeeBean{
Integer number; String name;
}
Managed BeanWEB画面
View
▪ FacesServlet・クライアント( Web ブラウザ)とのやり取りの窓口の役割を果たす
( MVC のコントローラーに相当する役割)。
・ FacesServlet は JSF のフレームワークが提供するものであり、開発者が
開発する必要はない。( =View と Model のみを開発)
XPagesの基盤技術である JavaEE JSFの理解 Controller
Xpages においても FacesServlet は機能しており、 Java 開発でも同様に Xpages で標準実装されている FacesServlet を利用可能
▪ 実際には XPages でどのような構造になるかの確認
▪ MVC がどのような構成で実装されているかの確認
▪ Web からリクエストがあった場合のレスポンスが返る
までのライフサイクルの確認( FacesServlet )
今回のデモの内容と説明
Form : Employee3 つのフィールド( ID、名前、電話番号)
Xpages : employeeeditor.xsp文書表示 登録ボタン、キャンセルボタンなど
employeelist.xsp文書のリスト表示、編集ボタン、新規作成ボタン
Xpagesでどのような構造になるかの確認
・ beanXPages と対になるように作成
・ dao, data実際のデータを処理する箇所
・ eventレスポンスが返るまでの
ライフサイクルの確認用のク
ラス群
・ faces-config.xml Managed Bean を利用するために
必要な設定を記載する箇所
XPagesでどのような構造になるかの確認M
odel
▪ faces-config.xml
XPages+Java開発するためのお作法ここで Maneged Bean に登録したいクラスを登録登録することによって Xpage 内でデータをバインド出来る
ここでライフサイクルを監視するクラスを登録
MVCがどのような構成で実装されているかの確認
XPage( 編集画面 )employeeeditor.xsp
Java(ManagedBean)EmployeeBean.java
XPage( 一覧画面 )employeelist.xsp
Java(ManagedBean)EmployeeListBean.java
Java(InterFace)EmployeeDAO.java
Java(Service)EmployeeCRUDFacade.java
Java(Object)Employee.java
DBJava(DAO)DominoEmployeeDAO.java 操作
FacesServlet (PhaseListener)実装不要EventController.java
FacesServletサイクル内動作 JSFライフサイクルModel
View Controller
派生関連
Clientリクエストレスポンス
ライフサイクルの確認( FacesServlet)例:ブラウザからリクエスト(保存)を送信し受け取ったFacesServlet 側で処理開始
登録KT0001
大阪 次郎名前ID
1、「ビューの復元」コンポーネントツリー復元ブラウザから受け取ったリクエストに対するコンポーネントツリーを JSF 実行時全情報を管理する FaceContext オブジェクトより取り出す
FaceContext
<xp:inputText value=“#{EmployeeBean.employeeNumber}” /><xp:inputText value=“#{EmployeeBean.employeeFullName}” /><xp:button value=“ 送信” />
employeeNumber employeeFullName
ライフサイクルの確認( FacesServlet)
3、「変換と検証」入力値を検証コンポーネントのうち型変換が必要な場合は変換処理その後にエラーチェックが必要なものはチェック処理
大阪次郎KT0001
2 、「入力値の適応」入力値をコンポーネントツリーにセットブラウザでの入力値をリクエストから取り出して対応するコンポーネントオブジェクトにセット
大阪次郎KT0001
ユーザーからの入力値(大阪二郎)がコンポーネントオブジェクト( employeeFullName )にセットされる
入力チェックの処理はManagedBean に記述
ライフサイクルの確認( FacesServlet)
5、「アプリケーションの呼出し」処理の実行actionListener のメソッドが呼び出されている場合はそれを実行する
4、「モデル値の更新」 ManagedBean の変数にセットコンポーネントの値を対応する ManegedBean のフィールドにセットする
employeeNumber
employeeFullName
KT0001
大阪 次郎
・イベントからの呼出し・ビジネスロジックなどボタンの処理等のプログラムが記述されている場合はこのタイミングで呼び出される
ライフサイクルの確認( FacesServlet)6、「レスポンスのレンダリング」ウェブ画面を生成して返す
レンダラーによりコンポーネントツリーからウェブ画面を返す。登録名前ID Face
Context保存
ライフサイクルの処理 完了
まとめ▪ 今回のデモでは SSJS を使わず Java によって構成▪ MVC モデルを採用することで汎用性、拡張性が増した。▪ コーディングが JSF フレームワークに準拠するようにな
る。▪ FacesServlet (PhaseListener) などより内部構造を理解し
た開発が行える。
参考文献・参考サイト1. 「わかりやすい JavaEE ウェブシステム入門」
Amazon: https://goo.gl/4T0RWb
2. 「 MVC in XPages Model – View – Controller 」Presentation for DanNotes by John DalsgaardURL: https://www.dalsgaard-data.eu/wp-content/uploads/2013/11/DanNotes-MVC.pdf
3. 「 Using JSF Framework Development Standards for your XPages Project 」Articles from PipaliaURL: http://www.pipalia.co.uk/notes-development/rethinking-xpages-part-one/