目次 前項目 次項目

RMI の例外


トピックス:

リモートオブジェクトのエクスポートにおける例外

UnicastRemoteObject を拡張するリモートオブジェクトクラスが作成されたときはそのオブジェクトはエクスポートされます。この意味は、このオブジェクトが外部の Java 仮想マシンからのコールを受け取ることができ、RMI コールにおいてパラメーターまたは返り値として渡すことができるということです。 オブジェクトは無名ポートまたは指定されたポートのどちらにでもエクスポートできます。UnicastRemoteObject を拡張した以外のオブジェクトでは、java.rmi.server.UnicastRemoteObject.exportObject を使ってオブジェクトを陽にエクスポートします。
例外 内容
java.rmi.StubNotFoundException
  1. スタブのクラスが見つからない
  2. スタブが次のいずれかのエラーを起こし、同じ名前のクラスと名前の衝突を起こした
    • スタブがインスタンス化できない
    • スタブのクラスが正しくない
  3. 間違った codebase のため URL が正しくない
  4. スタブのクラスが正しくない
java.rmi.server.SkeletonNotFoundException
  1. スケルトンのクラスが見つからない
  2. スケルトンが次のいずれかのエラーを起こし、同じ名前のクラスと名前の衝突を起こした
    • スケルトンがインスタンス化できない
    • スケルトンのクラスが正しくない
  3. 間違った codebase のため URL が正しくない
  4. スケルトンのクラスが正しくない
java.rmi.server.ExportException ポートが他の VM に使われている

RMI コールにおける例外
例外 内容
java.rmi.UnknownHostException 未知のホスト
java.rmi.ConnectException ホストへの接続が拒絶された
java.rmi.ConnectIOException 接続作成時に I/O エラー
java.rmi.MarshalException トランスポートヘッダー、コールヘッダー、引数整列時に I/O エラー
java.rmi.NoSuchObjectException 利用できないオブジェクト上のメソッドを呼び出そうとした
java.rmi.StubNotFoundException リモートオブジェクトがエクスポートされていない

リターンにおける例外とエラー
例外 内容
java.rmi.UnmarshalException
  1. 次の操作時にストリームが破壊され、I/O またはプロトコルエラー発生
    • リターンヘッダーの整列
    • リターンタイプのチェック
    • リターンコードのチェック
    • リターンの逆整列
  2. 返り値クラスが見つからない
java.rmi.UnexpectedException クライアント上でのランタイムを含め、メソッドシグネチャに記載されていない例外が発生。 例外オブジェクトは実際の例外である。
java.rmi.ServerError サーバがリモートメソッド実行中に発生するエラーのいずれか
java.rmi.ServerException サーバがリモートメソッド実行中に発生するエラーのいずれか。java.rmi.ServerException が発生する原因を参照。
java.rmi.ServerRuntimeException サーバがメソッド実行中に発生するランタイムエラーのいずれか。メソッドシグネチャに例外の記載があるかも知れない。例外オブジェクトは下層の例外を含む。

java.rmi.ServerException が発生する原因

サーバがリモートメソッド呼び出しを実行中に下層における例外がサーバ上に発生することがあります。 これらの例外は java.rmi.ServerException にラップされます。つまり java.rmi.ServerException がオリジナルの例外を含みクライアントはそれを抽出できます。 これらの例外は ServerException によってラップされ、クライアントはサーバ上のリモートメソッドに対する自分自身の呼び出しが失敗の原因ではなく、サーバの二次呼び出しが失敗したことを知ることができます。
例外 内容
java.rmi.server.SkeletonMismatchException スタブとスケルトンのハッシュ不一致
java.rmi.UnmarshalException コールヘッダーまたは引数の逆分解抽出中のI/O エラー
java.rmi.MarshalException 返り値を一体化中のプロトコルエラー
java.rmi.RemoteException ストリーム破壊のため、メソッド番号が範囲外

名前付け例外

次の表はjava.rmi.Naming クラスと java.rmi.registry.Registry インタフェースのメソッドで発生する例外をリストしたものです。
例外 内容
java.rmi.AccessException 操作を拒絶された。レジストリはバインド、リバインドおよびアンバインドを同一ホスト上に限定する。lookup は任意のホストからでも実行可能。
java.rmi.AlreadyBoundException すでにバインドされている名前をバインドしようとした
java.rmi.NotBoundException バインドされていない名前をルックアップしようとした
java.rmi.UnknownHostException 未知のホスト上のレジストリにコンタクトしようとした

それ以外の例外
例外 内容
java.rmi.RMISecurityException セキュリティ例外が RMISecurityManager によってスローされた
java.rmi.server.ServerCloneException クローン失敗
java.rmi.server.ServerNotActiveException リモートサーバがリモートメソッドを実行していない時に RemoteServer.getClientHost メソッドによってクライアントホストを得ようとした
java.rmi.server.SocketSecurityException 不法なポートからオブジェクトをエクスポートしようとした



目次 前項目 次項目

Copyright (C) 1996, 1997 Sun Microsystems, Inc. All rights reserved.