| 目次 | 前の項目 | 次の項目 | Java Remote Method Invocation |
RMI システムのリモート動作を決定するインタフェースとクラスは、java.rmi パッケージの階層で定義されます。次の図は、このうちいくつかのインタフェースとクラスの関係を示します。

java.rmi.Remote インタフェース
RMI において、リモートインタフェースは、リモート Java 仮想マシンから呼び出される可能性があるメソッドのセットを宣言するインタフェースです。リモートインタフェースは、次の要件を満たしている必要があります。
- リモートインタフェース内またはそのスーパーインタフェースの各メソッド宣言が、次のリモートメソッド宣言の要件を満たしている
- リモートメソッド宣言の throws 節に、アプリケーション固有の例外のほかに、例外
java.rmi.RemoteException(またはjava.io.IOExceptionやjava.lang.Exceptionなどのjava.rmi.RemoteExceptionのスーパークラスの 1 つ) が含まれている。 ただし、アプリケーション固有の例外は、java.rmi.RemoteExceptionを継承する必要はない- リモートメソッド宣言で、パラメータまたは戻り値として宣言された (パラメータリストで直接宣言されたか、パラメータの非リモートオブジェクト内に埋め込まれた) リモートオブジェクトは、リモートインタフェースの実装クラスとしてではなく、リモートインタフェースとして宣言される必要がある
java.rmi.Remoteインタフェースは、メソッドを定義しないマーカーインタフェースです。
public interface Remote {}リモートインタフェースは、少なくとも、java.rmi.Remoteインタフェース (またはjava.rmi.Remoteを継承する別のリモートインタフェース) を継承する必要があります。ただし、次の条件下では、リモートインタフェースは、非リモートインタフェースを継承する場合があります。
たとえば、次のインタフェースBankAccountは、銀行口座にアクセスするためのリモートインタフェースを定義しています。ここには、口座への預金、差引残高の取得、および口座からの引き出しを行うためのリモートメソッドが含まれています。
public interface BankAccount extends java.rmi.Remote { public void deposit(float amount) throws java.rmi.RemoteException; public void withdraw(float amount) throws OverdrawnException, java.rmi.RemoteException; public float getBalance() throws java.rmi.RemoteException; }次の例では、有効なリモートインタフェースBetaは、リモートメソッドおよびjava.rmi.Remoteインタフェースを持つ非リモートインタフェースAlphaを継承しています。
public interface Alpha { public final String okay = "constants are okay too"; public Object foo(Object obj) throws java.rmi.RemoteException; public void bar() throws java.io.IOException; public int baz() throws java.lang.Exception; } public interface Beta extends Alpha, java.rmi.Remote { public void ping() throws java.rmi.RemoteException; }2.4.2
RemoteExceptionクラスjava.rmi.RemoteExceptionクラスは、リモートメソッド呼び出しの間に RMI ランタイムがスローする例外のスーパークラスです。RMI システムを使うアプリケーションの安定性を保つために、リモートインタフェースで宣言される各リモートメソッドは throws 節の中でjava.rmi.RemoteException(またはjava.io.IOExceptionやjava.lang.Exceptionなどのjava.rmi.RemoteExceptionのスーパークラス) を指定する必要があります。例外
java.rmi.RemoteExceptionは、リモートメソッド呼び出しがなんらかの理由で失敗したときにスローされます。リモートメソッド呼び出しは、以下のような理由で失敗することがあります。
RemoteExceptionクラスは、チェックされる例外 (リモートメソッドの呼び出し側が処理する必要があり、コンパイラによってチェックされる例外) で、RuntimeExceptionではありません。
2.4.3
RemoteObjectクラスとそのサブクラスRMI サーバー関数はjava.rmi.server.RemoteObjectとそのサブクラス、java.rmi.server.RemoteServerとjava.rmi.server.UnicastRemoteObject、およびjava.rmi.activation.Activatableが提供します。