欢迎来到天天文库
浏览记录
ID:39550644
大小:24.00 KB
页数:3页
时间:2019-07-06
《Java中远程调用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.RMI概述RMI(RemoteMethodInvocation)是分布对象软件包,简化了在多台计算机上的Java应用之间的通信,使用的JDK版本必须在1.1以上。用到的类有两个:第一java.rmi.Remote,所有可以被远程调用的对象都必须实现该接口;第二java.rmi.server.UnicastRemoteObject,所有可以被远程调用的对象都必须扩展该类。2.什么是RMI远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某台计算机上的对象在调用另外一台计算机方法时,使用的程序语法规则和
2、在本地机上对象间的方法调用的语法规则一样。3.实现一个简单的RMI必须构造四个主要的类:远程对象的本地接口、RMI客户、远程对象实现和RMI服务器。RMI服务器生成远程对象实例的一个实例,并用一个特殊的URL注册它,RMI客户在远程服务器上查找对象,若找到就把它转换成本地接口类型,然后像一个本地对象一样使用它。以一个例子来说明:远程对象的本地接口类该类仅仅是一个接口,而不是实现,RMI客户机可以直接运行,RMI服务器必须通过一个远程对象来实现,并用某个URL注册它的一个实例.本地接口必须是公共的,否则客户机在加载一个实现该接口的远程对象时会
3、出现错误。同时必须从java.rmi.Remote继承而来,接口中每一个方法都必须抛出异常java.rmi.RemoteExceptionpackageremote;importjava.rmi.*;//这是一个本地接口类,而不是实现publicinterfaceLocalInterfaceextendsRemote{publicStringgetString()throwsRemoteException;}RMI客户类RMI客户使用Naming.lookup在指定的远程主机上查找对象,若找到就将其转换为本地接口类型(在此例子中是Local
4、Interface),然后就可以像本地对象一样使用它。远程服务机的URL可以通过rmi://host/path或rmi://host:port/path来指定。Naming.lookup可能产生三个异常:RemoteException,NotBoundException和MalformedURLException,三个异常均需捕获。其中前两个异常在java.rmi.*中定义,最后一个异常在java.net.*中定义。另外客户机将向远程对象中传递串行化对象Serializable,所以还应在程序中输入java.io.*。packageremo
5、te;importjava.rmi.*;importjava.net.*;importjava.io.*;publicclassClientRemote{publicstaticvoidmain(String[]args){try{Stringhost=(args.length>0)?args[0]:"localhost";//从命令行读取需要连接的主机名System.out.println(host);//通过URL在远程主机上查找对象,并把它转化为本地接口LocalInterface类型LocalInterfacelocalObject
6、=(LocalInterface)Naming.lookup("rmi://"+host+"/remote.LocalInterface");System.out.println(localObject.getString());//调用远程对象的方法}catch(RemoteExceptione){System.out.println(e.toString());}catch(NotBoundExceptionex){System.out.println(ex.toString());}catch(MalformedURLExceptio
7、nmfe){System.out.println(mfe.toString());}}远程对象实现类这个类真正实现RMI客户调用的远程对象,它必须从UnicastRemotedObject继承,其构造函数应该抛出RemoteException异常。packageremote;importjava.rmi.*;importjava.rmi.server.*;publicclassImpleRemoteextendsUnicastRemoteObjectimplementsLocalInterface{publicImpleRemote()th
8、rowsRemoteException{}//构造函数抛出RemoteException异常publicStringgetString()throwsRemoteExceptio
此文档下载收益归作者所有