A RMIの例外
A.1 リモート・オブジェクトのエクスポートにおける例外
UnicastRemoteObject
を拡張するリモート・オブジェクト・クラスが作成されたときは、そのオブジェクトはエクスポートされます。これは、このオブジェクトが外部のJava仮想マシンからの呼出しを受け取ることができ、RMI呼出しにおいてパラメータまたは戻り値として渡せることを意味します。 オブジェクトは、匿名ポートまたは指定されたポートのどちらにでもエクスポートできます。 UnicastRemoteObject
の拡張でないオブジェクトでは、java.rmi.server.UnicastRemoteObject.exportObject
を使用してオブジェクトを明示的にエクスポートします。
java.rmi.StubNotFoundException
スタブのクラスが見つからない。
スタブが次のどちらかのエラーを起こし、同じ名前のクラスと名前の競合を起こした。
- スタブがインスタンスを生成できない
- スタブのクラスが正しくない
codebaseが間違っているためURLが正しくない。
スタブのクラスが正しくない。
java.rmi.server.SkeletonNotFoundException
ノート: この例外は、Java 2 SDK、Standard Edition、v1.2で推奨されていません
スケルトンのクラスが見つからない。
スケルトンが次のどちらかのエラーを起こし、同じ名前のクラスと名前の競合を起こした
- スケルトンがインスタンスを生成できない
- スケルトンのクラスが正しくない
codebaseが間違っているためURLが正しくない。
スケルトンのクラスが正しくない。
java.rmi.server.ExportException
ポートがほかのVMに使われている。
A.2 RMI呼出しにおける例外
java.rmi.UnknownHostException
未知のホスト。
java.rmi.ConnectException
ホストへの接続が拒否された。
java.rmi.ConnectIOException
接続作成時の入出力エラー。
java.rmi.MarshalException
トランスポート・ヘッダー、呼出しヘッダー、引数整列時の入出力エラー。
java.rmi.NoSuchObjectException
利用できないオブジェクト上のメソッドを呼び出そうとした。
java.rmi.StubNotFoundException
リモート・オブジェクトがエクスポートされていない。
java.rmi.activation.ActivateFailedException
起動可能オブジェクトへのリモート呼出しで起動に失敗したときに、RMIランタイムによりスローされる
A.3 リターン中の例外とエラー
java.rmi.UnmarshalException
次の操作時にストリームが破壊され、入出力エラーまたはプロトコル・エラーが発生した
- リターン・ヘッダーの整列
- リターン・タイプのチェック
- リターン・コードのチェック
- リターンの非整列化
戻り値のクラスが見つからない。
java.rmi.UnexpectedException
メソッド・シグニチャに記載されていない例外が発生(実行時例外を除く)。 UnexpectedException
例外オブジェクトはサーバーによってスローされた基底の例外を含む。
java.rmi.ServerError
サーバーがリモート・メソッドを実行中に発生するエラーのどれか。 ServerError
例外オブジェクトには、サーバーによってスローされた基本エラーが含まれています。
java.rmi.ServerException
この例外は、サーバー上での呼出し処理の実行中にRemoteException
がスローされた場合に、リモート・メソッド呼び出し(引数の非整列化またはリモート・メソッド自体)の結果としてスローされる。 例については、「セクションA.3.1 java.rmi.ServerExceptionが発生する原因」を参照してください。
java.rmi.ServerRuntimeException
ノート: この例外は、Java 2 SDK、Standard Edition、v1.2で推奨されていません
Java 2 SDK, Standard Edition, v1.2と互換性のあるバージョンが動作しているサーバーは、この例外をスローしない。 RuntimeException
がクライアントにそのまま伝えられる。
A.3.1 java.rmi.ServerException
が発生する原因
サーバーが自身でリモート・メソッド呼出しを実行中にサーバー上で発生する可能性がある、基になる例外があります。 これらの例外はjava.rmi.ServerException
にラップされます。つまり、java.rmi.ServerException
にはクライアントが抽出する元の例外が含まれます。 これらの例外はServerException
によってラップされるので、クライアントはサーバー上での自身のリモート・メソッド呼出しは失敗しなかったけれども、サーバーが行った2番目のリモート・メソッド呼出しが失敗したことはわかります。
java.rmi.server.SkeletonMismatchException
ノート: この例外はJava 2 SDK、Standard Edition、v1.2以降では推奨されていません
スタブとスケルトンのハッシュ不一致。
java.rmi.UnmarshalException
- 呼出しヘッダーの非整列化中の入出力エラー。
- 引数の非整列化中の入出力エラー。
- メソッド番号またはメソッド・ハッシュが無効。
java.rmi.MarshalException
戻り値を整列化中のプロトコル・エラー。
java.rmi.RemoteException
RemoteException
はサーバーからのリモート呼出しの結果として発生する。
A.4ネーミングにおける例外
次の表はjava.rmi.Naming
クラスとjava.rmi.registry.Registry
インタフェースのメソッドで発生する例外を示したものです。
java.rmi.AccessException
操作を拒否された。 レジストリはバインド、リバインドおよびアンバインドを同一ホスト上に限定する。 lookupは任意のホストからでも実行可能。
java.rmi.AlreadyBoundException
すでにバインドされている名前をバインドしようとした。
java.rmi.NotBoundException
バインドされていない名前を検索しようとした。
java.rmi.UnknownHostException
未知のホスト上のレジストリにコンタクトしようとした。
A.5起動における例外
ノート: アクティブ化は非推奨になり、将来のバージョンのプラットフォームから削除される可能性があります。
次に、起動可能オブジェクトに関連する動作でスローされる可能性がある、例外の一覧を示します。 起動APIはjava.rmi.activationパッケージに含まれています。
java.rmi.activation.ActivateFailedException
起動可能オブジェクトへのリモート呼出しで起動に失敗したときにRMIランタイムによってスローされる。
java.rmi.activation.ActivationException
起動インタフェースおよびクラスによって使用される一般的な例外クラス。
java.rmi.activation.UnknownGroupException
ActivationGroupID
パラメータまたはActivationGroupDesc
パラメータのActivationGroupID
が無効になったときに、起動クラスおよびインタフェースのメソッドによりスローされる。
java.rmi.activation.UnknownObjectException
ActivationID
パラメータが無効になったときに、起動クラスまたはインタフェースのメソッドによりスローされる。
A.6それ以外の例外
java.rmi.RMISecurityException
ノート: この例外はJava 2 SDK、Standard Edition、v1.2以降では推奨されていません
RMISecurityManager
によってスローされたセキュリティ例外。
java.rmi.server.ServerCloneException
複製(コピー)に失敗した。
java.rmi.server.ServerNotActiveException
リモート・サーバーがリモート・メソッドで実行されていない時にRemoteServer.getClientHost
メソッドによってクライアント・ホストを取得しようとした。
java.rmi.server.SocketSecurityException
不法なポートからオブジェクトをエクスポートしようとした。