您的位置:首页 > 编程语言 > Java开发

java RMI(java远程方法调用实例解析)

2011-10-15 11:24 465 查看
在 Java 中,远程对象是实现远程接口的类的实例, 远程接口声明每个要远程调用的方法。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,客户通过接口句柄发送消息即可。

远程接口具有如下特点:

1) 远程接口必须为public属性。如果不这样,除非客户端与远程接口在同一个包内,否则 当试图装入实现该远程接口的远程对象时,调用会得到错误结果。

2) 远程接口必须扩展接口java.rmi.Remote。

3) 除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中 声明java.rmi.RemoteException。(或RemoteException 的父类)。

4) 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远 程接口,而不应声明为实施类。

例如:

1)创建远程接口TestRemote.java,源代码如下:

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface TestRemote extends Remote {

public int add(int a, int b) throws RemoteException;

}

2)创建远程接口的实现类TestRemoteImpl.java,源代码如下:

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

public class TestRemoteImpl extends UnicastRemoteObject implements TestRemote {

protected TestRemoteImpl() throws RemoteException {

super();

}

public int add(int a, int b) throws RemoteException {

return a+b;

}

}

3)编写服务器端代码Server.java,源代码如下:

import java.rmi.Naming;

import java.rmi.registry.LocateRegistry;

public class Server {

public static void main(String[] args) throws Exception {

try {

LocateRegistry.createRegistry(8808) ;

// 创建远程对象

TestRemote testRemote = new TestRemoteImpl();

// 奖名称绑定到对象

Naming.rebind("rmi://localhost:8808/server", testRemote);

System.out.println("RMI服务器正在运行。。。。。。");

} catch (Exception e) {

e.printStackTrace();

}

}

}

4)编写客户端代码 Client.java,源代码如下:

import java.rmi.Naming;

public class Client {

public static void main(String[] args) {

try {

String url = "rmi://localhost:8808/server";

TestRemote RmiObject = (TestRemote)Naming.lookup(url);

System.out.println(" 1 + 2 = " + RmiObject.add(1, 2) );

} catch (Exception exc) {

System.out.println("Error in lookup: " + exc.toString());

}

}

}

5)编译源代码:

javac Server.java

javac Client.java

6)为远程对象实现创建根和干:

要创建存根程序和骨架文件,应以包含远程对象实现的已编译类包全名运行 rmic 编译器。

存根(Stub)是远程对象在客户端的代理,它将RMI调用传递给服务器端的骨架(Skeleton),后者负责将该调用传递给实际的远程方法,

输入如下:

rmic -d E:\rmi TestRemoteImpl

其中;E:\rmi是代码保存的位置。

7)运行服务器端程序和客户端程序:

java Server

java Client
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: