该类通常扩展 java.rmi.server.UnicastRemoteObject,因而将继承类java.rmi.server.RemoteObject 和java.rmi.server.RemoteServer 提供的远程行为。 该类能实现任意多的远程接口。 该类能扩展其它远程实现类。 该类能定义远程接口中不出现的方法,但这些方法只能在本地使用而不能在远程使用。
例如,下面的类 BankAcctImpl 实现 BankAccount 远程接口并扩展java.rmi.server.UnicastRemoteObject 类:
package mypackage;
import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject;
public class BankAccountImpl extends UnicastRemoteObject implements BankAccount
{ private float balance = 0.0;
public BankAccountImpl(float initialBalance) throws RemoteException { balance = initialBalance; }
public void deposit(float amount) throws RemoteException { ... }
public void withdraw(float amount) throws OverdrawnException, RemoteException { ... }
public float getBalance() throws RemoteException { ... } }
注意:必要时,实现远程接口的类能扩展除java.rmi.server.UnicastRemoteObject 类以外的其它一些类。但实现类此时必须承担起一定的责任,即导出对象(由 UnicastRemoteObject 构造函数负责)和实现从 java.lang.Object 类继承的 hashCode、 equals 和toString 方法的正确远程语义(如果需要)。
远程方法调用中的参数传递
传给远程对象的参数或源于它的返回值可以是任意可序列化的 Java 对象。这包括 Java 基本类型, 远程?Java 对象和实现 java.io.Serializable 接口的非远程 Java 对象。有关如何使类序列化的详细信息,参见 Java“对象序列化规范”。本地得不到的作为参数或返回值的类,可通过 RMI 系统进行动态下载。
传递非远程对象
非远程对象将作为远程方法调用的参数传递或作为远程方法调用的结果返回时,是通过复制传递的;也就是使用 Java 对象序列化机制将该对象序列化。因此,在远程对象调用过程中,当非远程对象作为参数或返回值传递时,非远程对象的内容在调用远程对象之前将被复制。从远程方法调用返回非远程对象时,将在调用的虚拟机中创建新对象。
传递远程对象
当将远程对象作为远程方法调用的参数或返回值传递时,远程对象的 stub 程序即被传递出去。作为参数传递的远程对象仅能实现远程接口。 上一页 [1] [2] [3] [4] [5] [6] 下一页
|