快速业务通道

简单理解RMI - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
server = (IServer)Naming.lookup( " //localhost/MyServer " ); 12           System.out.println( " 查找远程对象成功。 " ); 13        } catch (Exception e) { 14           System.out.println( " 查找远程对象失败: " ); 15           System.out.println(e.getMessage()); 16           System.exit( 0 ); 17        } 18 19         try { 20           server.doSomeThing(); 21           System.out.println( " 调用doSomeThing()成功。 " ); 22        } catch (Exception e) { 23           System.out.println( " 调用doSomeThing()失败: " ); 24           System.out.println(e.getMessage()); 25           System.exit( 0 ); 26        } 27    } 28 } 29

简单理解RMI(3)

时间:2011-04-13 海边沫沫

可以看到,我们的客户端程序只用到了 IServer 接口,而不需要 ServerImp 类,它只通 过 java.rmi.Naming.lookup() 来查找远程对象的引用。

下面,我们就可以开始测试我们的程序了。先编译以上程序,然后:

第一步,要先启动 Rmi 注册表,如下:

简单理解RMI - 编程入门网

第二步,使用 rmic 对 ServerImp.class 进行编译,生成代理类 ServerImp_Stub.class ,如下:

简单理解RMI - 编程入门网

简单理解RMI(4)

时间:2011-04-13 海边沫沫

第三步,启动服务器端程序,如下:

简单理解RMI - 编程入门网

第四步,启动客户端程序,我们多调用几次,如下:

简单理解RMI - 编程入门网

这个时候,我们再看看服务器端是什么反应:

简单理解RMI - 编程入门网

可以看到,服务器端的方法被调用,在服务器端的控制台上打印出了这样几行消息。

下面,我们使用一个简单的图表来表示客户机、服务器和 RMI 注册表之间的关系,绿色 的数字代表顺序:

简单理解RMI - 编程入门网

简单理解RMI(5)

时间:2011-04-13 海边沫沫

二、参数传递

前面的例子没有涉及到参数的传递。如果我们需要向远程方法传递参数,或者要从远程方 法接受返回值,是不是有什么特殊的约定呢?不错,如果我们要在客户机和服务器之间传递 参数,则该对象要么是实现Serializable接口的对象,要么是扩展自UnicastRemoteObject的 对象,这两种对象是有差别的。

如果参数是实现Serializable接口的对象,则该对象是按值传递的,也就是把这整个对象 传递到远程方法中。请看下面的例子,我们定义了一个ISerializableWorker接口,扩展自 Serializable接口,客户端创建一个SerializableWorkerImp对象wk,并把它传递到服务器端 ,服务器端调用wk.work()方法,这个方法在服务器端执行,这就说明了我们成功把这个对象 传递到了服务器端。服务器端返回的String对象,也可以成功传递到客户端。

ISerializableWorker.java package rmistudy; 2 3 import java.io.Serializable; 4 5  public  interface ISerializableWorker extends Serializable  { 6   public  void work(); 7 } SerializableWorkerImp.java 1package rmistudy; 2 3public class SerializableWorkerImp implements ISerializableWorker { 4 5  public void work() { 6    System.out.println("该信息由SerializableWorker对象输出。"); 7  } 8 9} IServer.java 1package rmistudy; 2 3import java.rmi.Remote; 4import java.rmi.RemoteException; 5 6public interface IServer extends Remote { 7  public void doSomeThing() throws RemoteException; 8  public String doSomeThing(ISerializableWorker wk) throws RemoteException; 9} ServerImp.java 1package

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号