8.6.3 バックシステムでのタイムアウトを設定する
ここでは,バックシステムでのタイムアウトの設定について説明します。なお,バックシステムでのタイムアウトのうち,データベースなどのEISとのトランザクションに関連するタイムアウトについては,「8.6.4 トランザクションタイムアウトを設定する」で説明します。ここではEJBクライアントとEJBコンテナに関連するタイムアウトについて説明します。
バックシステムのタイムアウトを設定する場合は,システム全体のタイムアウトのうち,次の図に示す,7〜9のポイントについて意識する必要があります。なお,この番号は,図8-9または図8-10と対応しています。
-
Enterprise Beanをリモート呼び出し(RMI-IIOP通信)する場合とCORBAネーミングサービスを呼び出す場合のクライアント側待ち時間(7のポイント)
CORBAネーミングサービスまたはJ2EEアプリケーションへのアクセスで何かのトラブルが発生して制御が戻らなくなった場合に,タイムアウトによってEJBクライアントにエラーを通知します。
-
CTMまたはEJBクライアントからEnterprise Beanを呼び出す場合のクライアント側待ち時間(8のポイント)
J2EEアプリケーションで,無限ループやデッドロックなど何らかのトラブルが発生した場合に,CTMのリソースを解放します。また,EJBクライアントにエラーを通知します。
- ポイント
-
EJBクライアントからEnterprise Beanを呼び出す場合,タイムアウトはusrconf.propertiesまたはアプリケーションサーバが提供するAPI(com.hitachi.software.ejb.ejbclient.RequestTimeoutConfigクラスのメソッド)に指定できます。
usrconf.propertiesの定義は,プロセス全体に影響します。APIに指定したタイムアウトは,ビジネスメソッドを呼び出すスレッドまたはオブジェクトの範囲に影響します。また,APIの指定は,usrconf.propertiesの定義よりも優先されます。
このため,プロセス全体に設定したい標準的な値をusrconf.propertiesに定義して,呼び出す業務によって細かく設定したい値は適宜APIを使用して設定することをお勧めします。
Enterprise Beanの呼び出しでタイムアウトが発生した場合,EJBクライアント側には,javax.rmi.RemoteException(org.omg.CORBA.TIMEOUTなど)例外が通知されます。これによって,クライアント側のリクエストはキャンセルされます。ただし,この時点でサーバ側のEnterprise Beanの処理がすでに開始されていた場合は,そのまま処理が継続されます。このため,タイムアウトが発生した場合でも,サーバ側の処理は正常に終了することがあります。
-
EJBコンテナ上でのメソッド処理待ち時間(9のポイント)
J2EEアプリケーションの実行時間監視機能を利用します。
「8.6.7 J2EEアプリケーションのメソッドタイムアウトを設定する」を参照してください。
また,9のポイントで,Stateless Session Beanのmethod-readyプールおよびEntity Beanのpoolプールのインスタンスが時間内に取得できない場合も,タイムアウトが設定できます。この場合は,クライアントにjava.rmi.RemoteException(リモートクライアントの場合)またはjavax.ejb.EJBException(ローカルクライアントの場合)が送出されます。