精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Java>>JAVA编程>>网络编程>>RMI>>RMI规范--第二章(3)

主题:RMI规范--第二章(3)
发信人: daystream()
整理人: biubiu(2000-01-02 15:21:50), 站内信件
2.4 RMI 接口和类概述
2.4.1 java.rmi.Remote 接口
在 RMI 中,远程接口是声明了可从远程 Java 虚拟机中调用的方法集。远程接

口必须满足下列要求:

远程接口至少必须直接或间接扩展 java.rmi.Remote 接口。 
远程接口中的方法声明必须满足下列远程方法声明的要求: 
远程方法声明在其 throws 子句中除了要包含与应用程序有关的异常(注意与
应用程序有关的异常无需扩展 java.rmi.RemoteException )之外,还必须包
括 java.rmi.RemoteException 异常(或它的超类,例如
 java.io.IOException 或 java.lang.Exception )。 
远程方法声明中,作为参数或返回值声明的(在参数表中直接声明或嵌入到参数

的非远程对象中)远程对象必须声明为远程接口,而非该接口的实现类。 
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。它扩展非远程接口 Alpha(有远程方法)和

接口 java.rmi.Remote:

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 异
常。远程方法调用失败的原因包括:

通讯失败(远程服务器不可达或拒绝连接;连接被服务器关闭等。) 
参数或返回值传输或读取时失败 
协议错误 
RemoteException 类是一个已检验的异常(必须由远程方法的调用程序处理并
经编译器检验的异常),而不是 RuntimeException。

2.4.3 RemoteObject 类及其子类
RMI 服务器函数由 java.rmi.server.RemoteObject 及其子类 
java.rmi.server.RemoteServer、java.rmi.server.UnicastRemoteObject
 和 java.rmi.activation.Activatable 提供。

java.rmi.server.RemoteObject 为对远程对象敏感的 java.lang.Object 
方法、hashCode、 equals 和 toString 提供实现。 
创建远程对象并将其导出(使它们可为远程客户机利用)所需的方法由类 
UnicastRemoteObject 和 Activatable 提供。子类可以识别远程引用的语义,

例如服务器是简单的远程对象还是可激活的远程对象(调用时将执行的远程对象
)。 
java.rmi.server.UnicastRemoteObject 类定义了单体(单路传送)远程对
象,其引用只有在服务器进程活着时才有效。 
类 java.rmi.activation.Activatable 是抽象类,它定义的 activatable 
远程对象在其远程方法被调用时开始执行并在必要时自己关闭。 

--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.191.124]

[关闭][返回]