ここでは,障害発生時に引き継げるHTTPセッションの属性に関する次の項目について説明します。
セッションフェイルオーバ機能では,グローバルセッション情報の更新処理でオブジェクトのシリアライズ,引き継ぎ処理でオブジェクトのデシリアライズ処理が発生します。そのため,HTTPセッションに登録する属性は,次の条件を満たす必要があります。
セッションフェイルオーバ機能では,次に示す直列化可能クラスのオブジェクトを引き継ぎ対象としてサポートしています。
ただし,引き継ぎ処理では,HTTPセッションに登録された直列化可能クラスのオブジェクトが,セッションフェイルオーバ機能でサポートされているオブジェクトかどうかはチェックされません。
HTTPセッションに登録されたオブジェクトの内容によるセッション情報の引き継ぎ可否を次の表に示します。
表5-3 HTTPセッションに登録されたオブジェクトによるセッション情報の引き継ぎ可否
項番 | HTTPセッションに登録されたオブジェクトの内容 | セッション情報の引き継ぎ可否 | グローバルセッション情報の格納 | |
---|---|---|---|---|
java.io.Serializableインタフェースの実装の有無 | シリアライズの成功/失敗 | |||
1 | java.io.Serializableインタフェースの実装あり | シリアライズの成功 | 引き継ぎできます。 | シリアライズ後の情報がデータベースまたはEADsサーバに格納されます。 |
2 | シリアライズの失敗 | シリアライズに失敗した属性を含むHTTPセッションは,グローバルセッションの引き継ぎの対象とならないため,引き継ぎできません。 | KDJE34318-EまたはKDJE34411-Eのメッセージが出力され,データベースまたはEADsサーバにグローバルセッション情報は格納されません。 次回以降のリクエスト処理完了後に,HTTPセッションに登録されたオブジェクトがシリアライズ可能となった時点で,データベース上,またはEADsサーバ上にグローバルセッション情報が格納されます。 | |
3 | java.io.Serializableインタフェースの実装なし | (シリアライズできません) | シリアライズできない属性はグローバルセッションの引き継ぎの対象とならないため,引き継ぎできません。 | シリアライズできないオブジェクトが存在したときは,KDJE34317-WまたはKDJE34410-Wのメッセージが出力され,シリアライズできない属性を除いた属性で作成したグローバルセッション情報がデータベースまたはEADsサーバに格納されます。 |
シリアライズ処理についての注意事項を次に示します。
引き継ぎ対象のオブジェクトだけでなく,引き継ぎ対象のオブジェクトから参照されるオブジェクトすべてを対象としてシリアライズ処理が実行されます。このため,引き継ぐ必要がない情報を含むクラスなどをHTTPセッションに登録した場合,性能が低下するおそれがあります。
シリアライズ処理では,一時的に,アプリケーションで設定したHttpSessionオブジェクト数を超えてシリアライズ後のデータが作成されます。そのため,巨大なオブジェクトがHTTPセッションに登録された場合,グローバルセッション情報の作成中にjava.lang.OutOfMemoryErrorエラーが発生することがあります。
次のような場合は,KDJE34317-W,KDJE34318-E,KDJE34410-W,またはKDJE34411-Eのメッセージが出力され,シリアライズに失敗します。
失敗した場合,グローバルセッション情報の更新,および引き継ぎ処理が実行されません。処理を実行するためには,次のどちらかの対処が必要です。
次のような場合は,デシリアライズに失敗します。
リクエストの受信時,またはWebアプリケーション開始時のグローバルセッション情報の引き継ぎ処理でセッション情報のデシリアライズに失敗した場合,グローバルセッション情報およびセッション情報が削除され,KDJE34326-E,またはKDJE34413-Eが出力されます。セッションの引き継ぎに失敗するため,HTTPセッションがない状態でリクエストが処理されます。