3.3.4 アプリケーションサーバのほかの機能との関連
ここでは,JSFおよびJSTLとアプリケーションサーバのほかの機能との関連について説明します。
JSFまたはJSTLとあわせて利用する場合に,留意する必要がある機能を次の表に示します。
項番 |
機能 |
機能についての参照先 |
---|---|---|
1 |
明示管理ヒープ機能 |
マニュアル「機能解説 拡張編」の「7. 明示管理ヒープ機能を使用したFullGCの抑止」 |
2 |
セッションフェイルオーバ機能 |
マニュアル「機能解説 拡張編」の「5.2 セッションフェイルオーバ機能の概要」 |
3 |
リデプロイ機能とリロード機能 |
マニュアル「機能解説 基本・開発編(コンテナ共通機能)」の「18. J2EEアプリケーションの形式とデプロイ」 |
4 |
JSP事前コンパイル機能 |
|
5 |
J2EEリソースへの別名付与(ユーザ指定名前空間機能) |
マニュアル「機能解説 基本・開発編(コンテナ共通機能)」の「2. ネーミング管理」 |
以降,JSFおよびJSTLと各機能との関連について説明します。
- 〈この項の構成〉
(1) 明示管理ヒープ機能
JSFでは,ユーザが作成したFaceletsファイルやJSPファイルを基に生成された次の情報およびオブジェクトを,HTTPセッションに登録します。
-
HTMLページの画面の情報(ビューの状態)
-
SessionScopeを定義したManagedBeanクラスのオブジェクト
これらの情報およびオブジェクトは,ほかのWebアプリケーションと同様に,明示管理ヒープ機能を使用して管理できます。
ただし,情報およびオブジェクトがHTTPセッションに登録されるかどうかには条件があります。また,HTTPセッションに登録されるすべての情報が明示管理ヒープを使用して管理されるわけではありません。HTTPセッションに情報またはオブジェクトが登録される条件と,それらの情報またはオブジェクトが明示管理ヒープ機能を使用して管理されるかどうかを次の表に示します。
情報またはオブジェクト |
HTTPセッションに登録される条件 |
明示管理ヒープ機能を使用して管理されるかどうか |
---|---|---|
UIComponentのビュー情報(テキストフィールド,ラジオボタン,サブミットボタンなどのユーザとの入出力インターフェースを構成するビューの情報) |
JSF標準コンテキストパラメタのjavax.faces.STATE_SAVING_METHODの値が「server」(デフォルト値)の場合 |
使用しない |
ManagedBeanオブジェクト |
SessionScopeアノテーションが指定された場合,またはfaces-config.xmlの<managed-bean-scope>に「session」を指定した場合 |
使用する |
ページで使用する文字コード |
HTTPセッションが生成されていた場合 |
使用する |
SessionMapに登録したオブジェクト |
ユーザアプリケーションで使用した場合 |
使用する |
また,明示管理ヒープ機能を使用する場合,JSFアプリケーションが明示管理ヒープ領域で使用するメモリサイズの概算は,次の式を使用して算出してください。
- JSFアプリケーションが明示管理ヒープ領域で使用するメモリサイズ
1セッション当たりで明示管理ヒープ領域を使用するサイズ =(A※+1) × 0.4キロバイト +ManagedBeanオブジェクトサイズ(HTTPセッションに登録される場合) +SeesionMapに登録した場合のオブジェクトサイズ
注※ AはJSFの論理ページの最大値を設定するプロパティ(com.sun.faces.numberOfLogicalViews)に指定した値です。デフォルトは15です。
- JSFアプリケーションで明示管理ヒープ機能を使用する場合の注意事項
-
JSFでは,HTTPセッションの破棄(javax.servlet.http.HttpServletRequestインタフェースのinvalidateメソッド呼び出し)を実行しません。このため,ユーザアプリケーション内でHTTPセッションの破棄(javax.servlet.http.HttpServletRequestインタフェースのinvalidateメソッド呼び出し)を実行するか,または適切なセッションタイムアウトを設定してください。
(2) セッションフェイルオーバ機能
JSFがHTTPセッションに登録するオブジェクトを利用して,ほかのWebアプリケーションと同様にセッションフェイルオーバ機能を使用できます。JSF固有の設定も不要です。
- JSFアプリケーションがHTTPセッションに登録するオブジェクトサイズ
-
セッションフェイルオーバ機能を使用する場合,JSFアプリケーションがHTTPセッションに登録するオブジェクトサイズの概算は,次の表に示す値を使用して見積もってください。
表3‒5 JSFアプリケーションがHTTPセッションに登録するオブジェクトサイズ ページ
メモリを使用する処理
使用メモリ
Faceletsページ
必須なオブジェクトと各タグ部分
1.3キロバイト
一つのFormタグのページ生成部分
0.2キロバイト※1
EL式を使用した場合※2
0.8キロバイト※3
JSPページ
必須なオブジェクトと各タグ部分
2.2キロバイト
一つのFormタグのページ生成部分
2.0キロバイト※1
EL式を使用した場合※2
0.8キロバイト※3
なお,この表で示した値は概算値です。実際にHTTPセッションで利用するメモリサイズについては,アプリケーションを実行して得られた情報を基に見積もってください。
- JSFアプリケーションでセッションフェイルオーバ機能を使用する場合の注意事項
-
セッションフェイルオーバ機能では,HTTPセッションの属性引き継ぎ時のシリアライズ処理でシリアライズできない情報がある場合,シリアライズに失敗して,その情報は保持できません。これは,JSFアプリケーションでも同様です。次の場合,シリアライズ処理に失敗して,セッションフェイルオーバ機能は使用できません。
-
SessionScopeアノテーションが指定されているか,faces-config.xmlの<managed-bean-scope>に「session」を指定していて,ManagedBeanにシリアライズできない情報が含まれていた場合
-
SessionMapにシリアライズできない情報を登録した場合
-
(3) リデプロイ機能とリロード機能
リデプロイ機能について,JSFアプリケーションとして留意する点はありません。ほかのWebアプリケーションと同様に機能を使用できます。
リロード機能についても,コマンドによるリロードを実行する場合は,JSFアプリケーションとして留意する点はありません。ほかのWebアプリケーションと同様に機能を使用できます。
ただし,更新検知によるリロードについては,更新検知の対象となるファイルに次の制限があります。
- JSPファイルの更新検知
-
ほかのWebアプリケーションの更新検知と差異はありません。
- Faceletsファイルの更新検知
-
更新検知の対象外です。
次に,Faceletsに含まれるファイルが更新された場合に,どの範囲でリロード機能が実行されるかを示します。
更新検知の対象ファイル |
リロード機能の適用範囲 |
||
---|---|---|---|
app |
web |
jsp |
|
Faceletsファイル |
× |
× |
× |
タグファイル |
○ |
○ |
○ |
ManagedBeanコンパイル結果 |
○ |
○ |
○ |
静的コンテンツ |
× |
× |
× |
クラスローダによってロードされるファイルであるサーブレットやJSPファイルは,監視対象のファイルなので,更新されたときにJ2EEサーバが更新を検知してリロードが実行されます。しかし,Faceletsファイルはクラスローダによってロードされるファイルではありません。このため,Faceletsファイルを更新しても,J2EEサーバで更新が検知されないため,リロードも実行されません。
Faceletsファイルの更新を自動的に検知して反映したい場合は,標準コンテキストパラメタにjavax.faces.FACELETS_REFRESH_PERIODを指定してください。このパラメタに定義した時間間隔でFaceletsファイルの更新状態が監視され,更新が検知されると,その内容が反映されます。ただし,この機能は展開ディレクトリ形式のアプリケーションの場合だけ有効です。
なお,Faceletsファイルのページ出力を実行したあとでFaceletsファイルを更新した場合は,次にページにアクセスした時にJSFによってFaceletsファイルの更新が検知され,KDJE59227-Iメッセージが出力されます。
(4) JSP事前コンパイル機能
JSFアプリケーション内のJSPファイルは,JSP事前コンパイル機能を使用してコンパイルできます。
(5) J2EEリソースへの別名付与(ユーザ指定名前空間機能)
JSTLでは,J2EEリソースの別名は使用できません。
JSTLの<sql:setDataSource>タグのdatasource属性には,java:comp/envからの相対パスを指定してください。