WebOTX Manual V10.2 (第4版) 目次を表示 |
クライアントからEJB のリモートメソッドの呼び出しが失敗する場合の対処について説明します。
RMI の仕様では、リモート呼び出しが失敗した場合、クライアントにはjava.rmi.RemoteException が投げられます。このとき、エラーの原因となった例外がRemoteException の中にラッピングされていますので、この例外を参照することによりエラーの原因を特定することができます。
また、サーバ側のEJB コンテナ上でリモートメソッドを実行しているときに例外が発生した場合は、java.rmi.RemoteException がさらにjava.rmi.ServerException にラッピングされて投げられます。
クライアント側でリモート呼び出しのタイムアウトを検知した場合、以下のようにorg.omg.CORBA.NO_RESPONSE をラッピングしたRemoteException がクライアントに投げられます。
java.rmi.RemoteException: CORBA NO_RESPONSE 5130 No; nested exception is: org.omg.CORBA.NO_RESPONSE: Invocation timeout occurred
クライアント側のタイムアウト値の設定はObject Broker の設定に従います。既定値は30 秒となっています。必要に応じて設定を変更してください。
注意としてタイムアウトが発生した場合でもEJB コンテナ側ではそのまま処理が継続されますので、クライアント側では呼び出しがエラーとなったように見えても、サーバ側ではトランザクションがコミットされてしまう可能性があります。このような問題を発生させないようにするためには、サーバ側でもメソッドの実行時間の上限の値をクライアント側のタイムアウト値の設定よりも短く設定する必要があります。
org.omg.CORBA.MARSHAL がラッピングされたRemoteException が投げられた場合、RMI-IIOP のマーシャリング、アンマーシャリングがエラーの原因です。以下のケースが考えられますのでそれらを確認してください。