Java RMI详解:远程方法调用与JNDI基础

需积分: 9 0 下载量 125 浏览量 更新于2024-08-18 收藏 299KB PPT 举报
"RMI简介-第二章-RMI" RMI(Remote Method Invocation)是Java平台中的一个核心特性,用于实现远程对象之间的交互。通过RMI,开发者可以在一个Java虚拟机(JVM)上的对象调用另一个JVM上对象的方法,从而构建分布式应用。RMI是基于Java远程消息交换协议JRMP的,它充分利用了Java的“一次编写,到处运行”的特性,使得Java应用可以在任何支持JRE的平台上无缝运行。 在J2EE应用程序架构中,RMI扮演着关键角色,尤其是在企业级应用的层次结构中。J2EE应用通常包括客户层、Web层、业务层和企业信息层。RMI使得这些不同层次的组件之间能够进行远程通信。例如,EJB(Enterprise JavaBeans)组件,作为业务逻辑的容器,常常利用RMI与其他组件交互。 要理解RMI的工作原理,首先需要以下几个组成部分: 1. **远程服务接口**:定义了远程服务需要提供的方法,通常是一个Java接口。 2. **接口实现**:实现了远程服务接口的具体功能,是实际执行任务的对象。 3. **桩(Stub)和框架(Skeleton)文件**:桩是客户端用来调用远程方法的本地代理,框架则是服务器端处理客户端请求的组件。在现代Java版本中,骨架已不再必要,由Java序列化机制自动处理。 4. **远程服务器**:承载并执行远程服务的地方。 5. **RMI命名服务(JNDI)**:Java Naming and Directory Interface,用于查找和绑定远程对象,让客户端能够找到需要的远程服务。 6. **类文件的提供者**:提供远程对象所需的类文件,通常通过HTTP或FTP服务器。 7. **客户端程序**:使用RMI调用远程服务的代码。 RMI的工作流程大致如下:客户端通过JNDI查找远程服务的引用,然后通过桩对象调用远程方法。这个调用会被转换成网络消息,通过JRMP协议发送到远程服务器。服务器接收到消息后,解序列化并调用相应的服务方法,执行完成后,将结果序列化并通过网络返回给客户端。 RMI的一个重要特性是其透明性,即对开发者来说,调用远程方法与调用本地方法几乎没有区别。然而,由于JRMP协议是Java专用的,RMI并不支持非Java语言的对象交互,这是其局限性之一。 为了使用RMI,开发者需要完成以下步骤: 1. **定义远程接口**:声明远程方法和它们的异常。 2. **实现远程接口**:创建实现远程接口的类,并使用`@Remote`注解标记。 3. **注册远程对象**:使用`UnicastRemoteObject`或`RMIServerSocketFactory`创建远程对象实例,并将其注册到RMI注册表中。 4. **创建客户端**:获取远程对象的引用,通过桩对象调用远程方法。 5. **部署和运行**:确保所有必要的类文件可用,并启动服务器和客户端。 在实际应用中,RMI经常与EJB、Servlets、JSP等其他J2EE组件结合使用,共同构建复杂的分布式系统。通过RMI,开发者可以构建高度模块化、可扩展的系统,跨越网络边界共享数据和服务,极大地提升了软件的灵活性和可维护性。