セション開始後、一定時間ブラウザからのリクエストがないとタイムアウトが発生し、セションに関連付けられたデータは失われます。そのため、タイムアウト後にブラウザからのリクエストを受信しても正常に処理が行なえない場合があります。
タイムアウト後にリクエストを受信した場合に特定の処理を実行させるには、以下のようにアプリケーションを作成します。
1. タイムアウトした場合に実行するメソッドを追加する
タイムアウト後にリクエストを受信した場合の処理を実行するメソッドをビジネスクラスに作成します。
public class SampleHandler extends GenericHandler { public void timeoutProcess(DispatchContext context) { // タイムアウトの処理を記述 ... } }
引数は1個で、型はDispatchContextにします。
2. タイムアウトした場合のメソッドを呼び出すコマンドを定義する
上記メソッドを呼び出すためのコマンドを定義します。そのコマンドと1のメソッドの対応付けをコマンドマップに記述します。
;timeout=sample.SampleHandler.timeoutProcess
この例では、コマンドをtimeoutとしました。データBeanなし、コマンドtimeout の対を1で定義したメソッドに対応づけます。
3. ユーザ定義のアプリケーションクラスを作成する
com.fujitsu.uji.ApplicationProfileクラスを継承してユーザ定義のアプリケーションクラスを作成します。
なお、ユーザ定義のアプリケーションクラスを有効にするために、以下の作業が必要になります。具体的な方法は“3.5 ファクトリクラス”を参照してください。
ファクトリクラスを作成し、ユーザ定義アプリケーションクラスのオブジェクトが作成されるようにします。
初期化パラメタでファクトリクラスのクラス名を指定します。
4. アプリケーションクラスのnotifyBeanLostメソッドをオーバライドする
アプリケーションクラスのnotifyBeanLostメソッドをオーバライドします。このメソッドが2のコマンドを返却するように作成します。
package sample; public class SampleApplication extends com.fujitsu.uji.ApplicationProfile { public String notifyBeanLost(String id) { return "timeout"; } }
注意
以上の方法を使ってタイムアウトを検出する場合は、フォームを作成する際に以下の点に注意してください。
フォームをuji:formタグで作成する場合は、beanIdアトリビュートを指定してください。HTMLのFORMタグの場合は、uji.idリクエストパラメタをフォームに追加してください。また、beanIdまたはuji.idで指定したデータBeanに対して、uji:useBeanタグでrequest="true"を指定してください。beanId、uji.id は、フォームに入力されたデータを受け取るデータBeanを指定します。
<uji:useBean id="body" cls="my.pkg.MyDataBean" request="true" /> ... <uji:form name="order" method="post" verbs="ok,cancel" beanId="body"> 商品コード: <INPUT NAME="code"><BR> 個数: <INPUT NAME="count"><BR> <INPUT TYPE="SUBMIT" NAME="ok" VALUE="決定"> <INPUT TYPE="SUBMIT" NAME="cancel" VALUE="キャンセル"> </uji:form>
フォームをuji:formタグで作成する場合は、beanClsアトリビュートを指定しないでください。HTMLのFORMタグの場合は、uji.beanリクエストパラメタを含めないでください。
beanId, beanClsアトリビュート、uji.id, uji.beanリクエストパラメタの詳細は、“G.1.2 フォームを作成したい”を参照してください。
関連項目