XPagesDay 2016 「xpagesでjava開発するぞ!」

29
ケケケケケケケケケケ ケケ ケケ XPages ケ Java ケケケケケXPagesDay 2016 2016 年 11 年 21 年ケケ ケケ

Transcript of XPagesDay 2016 「xpagesでjava開発するぞ!」

ケートリック株式会社田付 和慶

XPages で Java 開発するぞ!- XPagesDay 2016-( 2016年 11月 21日)

米原 和之

自己紹介

• ケートリック株式会社 代表取締役田付 和慶 (たつき かずのり)

• XPages の正式リリース前から XPages 開発に携わる• 趣味のギターは今や部屋のインテリアと化す

自己紹介

• ケートリック株式会社 リード 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/