RMI一步一步来

本文详细介绍如何使用RMI(远程方法调用)构建分布式Java应用程序。包括接口定义与实现、桩和框架生成、运行远程服务及客户端程序等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI是非常容易使用的,但是它非常的强大。   RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。下面我们通过具体的例子,建立一个简单的远程计算服务和使用它的客户程序   一个正常工作的RMI系统由下面几个部分组成:   远程服务的接口定义   远程服务接口的具体实现   桩(Stub)和框架(Skeleton)文件   一个运行远程服务的 服务器   一个RMI命名服务,它允许客户端去发现这个远程服务   类文件的提供者(一个HTTP或者FTP服务器)   一个需要这个远程服务的客户端程序   下面我们一步一步建立一个简单的RMI系统。首先在你的机器里建立一个新的文件夹,以便放置我们创建的文件,为了简单起见,我们只使用一个文件夹存放客户端和服务端代码,并且在同一个目录下运行服务端和客户端。   如果所有的RMI文件都已经设计好了,那么你需要下面的几个步骤去生成你的系统:   1、 编写并且编译接口的Java代码   2、 编写并且编译接口实现的Java代码   3、 从接口实现类中生成桩(Stub)和框架(Skeleton)类文件   4、 编写远程服务的主运行程序   5、 编写RMI的客户端程序   6、 安装并且运行RMI系统   1、 接口   第一步就是建立和编译服务接口的Java代码。这个接口定义了所有的提供远程服务的功能,下面是源程序:   //Calculator.java   //define the interface   import java.rmi.Remote;   public interface Calculator extends Remote   {    public long add(long a, long b)    throws java.rmi.RemoteException;    public long sub(long a, long b)    throws java.rmi.RemoteException;    public long mul(long a, long b)    throws java.rmi.RemoteException;    public long div(long a, long b)    throws java.rmi.RemoteException;   }   注意,这个接口继承自Remote,每一个定义的方法都必须抛出一个RemoteException异常对象。   建立这个文件,把它存放在刚才的目录下,并且编译。   >javac Calculator.java   2、 接口的具体实现   下一步,我们就要写远程服务的具体实现,这是一个CalculatorImpl类文件:   //CalculatorImpl.java   //Implementation   import java.rmi.server.UnicastRemoteObject   public class CalculatorImpl extends UnicastRemoteObject implements Calculator   {    // 这个实现必须有一个显式的构造函数,并且要抛出一个RemoteException异常    public CalculatorImpl()    throws java.rmi.RemoteException {    super();    }    public long add(long a, long b)    throws java.rmi.RemoteException {    return a + b;    }    public long sub(long a, long b)    throws java.rmi.RemoteException {    return a - b;    }    public long mul(long a, long b)    throws java.rmi.RemoteException {    return a * b;    }    public long div(long a, long b)    throws java.rmi.RemoteException {    return a / b;    }   }   同样的,把这个文件保存在你的目录里然后编译他。   这个实现类使用了UnicastRemoteObject去联接RMI系统。在我们的例子中,我们是直接的从UnicastRemoteObject这个类上继承的,事实上并不一定要这样做,如果一个类不是从UnicastRmeoteObject上继承,那必须使用它的exportObject()方法去联接到RMI。   如果一个类继承自UnicastRemoteObject,那么它必须提供一个构造函数并且声明抛出一个RemoteException对象。当这个构造函数调用了super(),它久激活UnicastRemoteObject中的代码完成RMI的连接和远程对象的初始化。   3、 桩(Stubs)和框架(Skeletons)   下一步就是要使用RMI编译器rmic来生成桩和框架文件,这个编译运行在远程服务实现类文件上。   >rmic CalculatorImpl   在你的目录下运行上面的命令,成功执行完上面的命令你可以发现一个Calculator_stub.class文件,如果你是使用的Java2SDK,那么你还可以发现Calculator_Skel.class文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值