|
|
一个正常工作的RMI系统由下面几个部分组成:
● 远程服务接口的定义
● 远程服务接口的具体实现
● 桩(Stub)和框架(Skeleton)文件
● 一个运行远程服务的服务器
● 一个RMI命名服务,它允许客户端去发现这个远程服务
● 类文件的提供者(一个HTTP或者FTP服务器)
● 一个需要这个远程服务的客户端程序
如果所有的RMI文件都已经设计好了,那么需要下面的几个步骤去生成系统:
1、 编写并且编译接口的Java代码
2、 编写并且编译接口实现的Java代码
3、 从接口实现类中生成桩(Stub)和框架(Skeleton)类文件
4、 编写远程服务的主运行程序
5、 编写RMI的客户端程序
6、 安装并且运行RMI系统
实现过程如下:(以下代码在Windows Server 2003,JDK1.6环境下调试通过,代码来自互联网)
服务器端:
1接口
第一步就是建立和编译服务接口的Java代码。这个接口定义了所有的提供远程服务的功能,下面是源程序:
Product,java
import java.rmi.*;
public interface Product extends Remote
{
String getDescription() throws RemoteException;
}
2接口的具体实现
下一步,我们就要写远程服务的具体实现,这是一个ProductImpl类文件:
ProductImpl.java
import java.rmi.*;
import java.rmi.server.*;
public class ProductImpl extends UnicastRemoteObject implements Product
{
private String name ;
public ProductImpl(String n) throws RemoteException
{
name = n;
}
public String getDescription()
{
return "Hello,I am " + name + " . I love you !";
}
}
3 桩(Stubs)和框架(Skeletons)
下一步就是要使用RMI编译器rmic来生成桩和框架文件,这个编译运行在远程服务实现类文件上。
>rmic ProductImpl
在你的目录下运行上面的命令,成功执行完上面的命令你可以发现一个ProductImpl_stub.class文件,如果你是使用的是1.2以前的SDK,那么你还可以发现ProductImpl_Skel.class文件。
4 主机服务器
远程RMI服务必须是在一个服务器中运行的。
ProductServer.java
import java.rmi.*;
import java.rmi.server.*;
public class ProductServer {
public static void main(String args[])
{
try
{
System.out.println("Construction server implementats ...");
ProductImpl p1 = new ProductImpl("Wang.yuanbin");
ProductImpl p2 = new ProductImpl("Bueaty");
System.out.println("binding server implementation to registry ...");
Naming.rebind("wyb",p1);
Naming.rebind("Beau",p2);
System.out.println("Waiting for invocations from clients ...");
}
catch (Exception ex)
{
System.out.println("Error: " + ex );
}
}
} |
|