欢迎来到天天文库
浏览记录
ID:9945495
大小:135.00 KB
页数:16页
时间:2018-05-16
《java_rmi技术讲解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、RMI技术讲解1、什么是RMI?我们知道远程过程调用(RemoteProcedureCall,RPC)可以用于一个进程调用另一个进程(很可能在另一个远程主机上)中的过程,从而提供了过程的分布能力。Java的RMI则在RPC的基础上向前又迈进了一步,即提供分布式对象间的通讯。RMI(RemoteMethodInvocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中
2、。2、RMI的用途?RMI的用途是为分布式Java应用程序之间的远程通信提供服务,提供分布式服务。目前主要应用时封装在各个J2EE项目框架中,例如Spring,EJB(Spring和EJB均封装了RMI技术)在Spring中实现RMI(具体代码见最后一页)①在服务器端定义服务的接口,定义特定的类实现这些接口;②在服务器端使用org.springframework.remoting.rmi.RmiServiceExporter类来注册服务;③在客户端使用org.springframework.remotin
3、g.rmi.RmiProxyFactoryBean来实现远程服务的代理功能;④在客户端定义访问与服务器端服务接口相同的类3、RMI的局限?RMI目前使用Java远程消息交换协议JRMP(JavaRemoteMessagingProtocol)进行通信。JRMP是专为Java的远程对象制定的协议,由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信(意思是只支持客户端和服务器端都是Java程序的代码的远程调用)。4、RMI的
4、使用局限?由于客户机和服务器都是使用Java编写的,二者平台兼容性的要求仅仅是双方都运行在版本兼容的Java虚拟机上。5、RMI应用程序的基本模型RMI本地对象本地对象本地对象客户端程序远程对象远程对象服务器端程序6、RMI调用远程方法的参数和返回值当调用远程对象上的方法时,客户机除了可以将原始类型的数据作为参数一外,还可以将对象作为参数来传递,与之相对应的是返回值,可以返回原始类型或对象,这些都是通过Java的对象序列化(serialization)技术来实现的。(换而言之:参数或者返回值如果是对象的话
5、必须实现Serializable接口)1、RMI体系结构客户机服务器Stub[stʌb]Skeleton['skelitn]远程引用层远程引用层虚拟连接传送层传送层传送层桩/框架(Stub/Skeleton)层:客户端的桩和服务器端的框架;远程引用(remotereference)层:处理远程引用行为传送层(transport):连接的建立和管理,以及远程对象的跟踪2、RMI类和接口(完成一个简单RMI需要用到的类)。Java.rmi.remote接口java.rmi.server.RemoteObjec
6、t(抽象类)Java.rmi.server.RemoteServer(抽象类)Java.rmi.activation.Activatable(抽象类)Java.rmi.server.UnicastRemoteObjectjava.lang.objectJava.rmi.registry.LocateRegistry(final类)Java.lang.SecurityManagerJava.rmi.Naming(final类)Java.rmi.RMISecurityManagerjava.io.IOExce
7、ptionJava.rmi.RemoteException一、Remote接口:是一个不定义方法的标记接口PublicinterfaceRemote{}在RMI中,远程接口声明了可以从远程Java虚拟机中调用的方法集。远程接口不需满足下列要求:1、远程接口必须直接或间接扩展Java.rmi.Remote接口,且必须声明为public,除非客户端于远程接口在同一包中2、在远程接口中的方法在声明时,除了要抛出与应用程序有关的一场之外,还必须包括RemoteException(或它的超类,IOExcepion或
8、Exception)异常3、在远程方法声明中,作为参数或返回值声明的远程对象必须声明为远程接口,而非该接口的实现类。二、RemoteObject抽象类实现了Remote接口和序列化Serializable接口,它和它的子类提供RMI服务器函数说一点:提供了创建远程对象并将其导出(也就是使他们能够被远程客户机所调用),所需的方法有类UnicastRemoteObject和Activatable提供。子类可以识别远程对象引用的语义
此文档下载收益归作者所有