Interstage Application Server J2EE ユーザーズガイド |
目次
索引
![]() ![]() |
第3部 EJB編 | > 第20章 EJBサービスで使用できる時間監視機能 |
トランザクションタイムアウト機能とは、トランザクションが開始されると同時に、トランザクションの時間監視を開始し、指定した一定の時間に到達するとトランザクションを自動的にロールバックする機能です。
このとき指定する時間のことを、“タイムアウト時間”といいます。
トランザクションタイムアウト機能を使用すると、1つのトランザクション内で、クライアントから複数回にわたってデータ入力を行うような業務において、2回目以降の入力が遅れたり、入力できない(PC電源遮断、通信回線異常など)といった状態に陥った場合、トランザクションを自動的に終了させることができます。
これにより、データベースが長時間占有されて、他のトランザクションで長時間待ち状態になることを防止することができます。
以下に、トランザクションタイムアウト機能を使用した場合の、一例を示します。
クライアント1からDBへのアクセス過程でクライアントのPCが電源断になった場合、以下のようにデータベースが占有されたままとなるため、クライアント2からDBへアクセスするときにトランザクションが待ち状態になってしまいます。
トランザクションタイムアウト機能を使用すると、指定した時間にデータベースを占有しているトランザクションが自動的にロールバックされるので、他のトランザクションが長時間待ちとなることを防止できます。
以下にタイムアウト時間に到達した場合の処理について説明します。
タイムアウト発生時の処理状況 |
処理内容 |
サーバ処理中にタイムアウト時間に到達した場合 |
コンテナに制御がわたった時点でトランザクションが完了していない場合は、トランザクションがロールバックされ、タイムアウトが発生したことがサーバのシステムログに通知され、以下のメッセージが出力されます。 EJB: エラー: EJB1026: トランザクションタイムアウトが発生しました クライアントには、トランザクションがロールバックされたことが通知されます。 注意事項) データベースで排他待ちの状態のときは、タイムアウト時間を超過してもタイムアウトとはなりません。メソッドの終了でコンテナに制御がわたった時点で、タイムアウトとなります。 |
クライアント処理中にタイムアウト時間に到達した場合 |
タイムアウト発生と同時にトランザクションはロールバックされ、サーバのシステムログに通知され、以下のメッセージが出力されます。 EJB: エラー: EJB1026: トランザクションタイムアウトが発生しました |
タイムアウト時間は秒単位で設定できます。タイムアウト時間はEJBアプリケーション定義の“トランザクションタイムアウト”で設定してください。またタイムアウト時間は、UserTransactionインタフェースのsetTransactionTimeout()メソッドを使用して、アプリケーションから動的に設定、または変更できます。
両方を設定した場合は、setTransactionTimeout()メソッドで設定した値が有効となります。
トランザクションタイムアウトの設定については“定義情報(2)タグ”を参照してください。
目次
索引
![]() ![]() |