搭建一个RMI服务的过程分为以下7步;
1,创建远程方法接口,该接口必须继承自Remote接口
Remote 接口是一个标识接口,用于标识所包含的方法可以从非本地虚拟机上调用的接口,Remote接口本身不包含任何方法
package server; import java.rmi.Remote; import java.rmi.RemoteException; public interface Hello extends Remote { public String sayHello(String name) throws RemoteException; }
由于远程方法调用的本质依然是网络通信,只不过隐藏了底层实现,网络通信是经常会出现异常的,所以接口的所有方法都必须抛出RemoteException以说明该方法是有风险的
2,创建远程方法接口实现类:
UnicastRemoteObject类的构造函数抛出了RemoteException,故其继承类不能使用默认构造函数,继承类的构造函数必须也抛出RemoteException
由于方法参数与返回值最终都将在网络上传输,故必须是可序列化的
package server; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class HelloImpl extends UnicastRemoteObject implements Hello { private static final long serialVersionUID = -271947229644133464L; public HelloImpl() throws RemoteException{ super(); } public String sayHello(String name) throws RemoteException { return "Hello,"+name; } }
4,启动RMI注册服务
LocateRegistry.createRegistry(12312);
5,编写服务端代码
package server; import java.rmi.Naming; import java.rmi.registry.LocateRegistry; public class HelloServer { public static void main(String[] args) { try{ Hello h = new HelloImpl(); //创建并导出接受指定port请求的本地主机上的Registry实例。 //LocateRegistry.createRegistry(12312); /** Naming 类提供在对象注册表中存储和获得远程对远程对象引用的方法 * Naming 类的每个方法都可将某个名称作为其一个参数, * 该名称是使用以下形式的 URL 格式(没有 scheme 组件)的 java.lang.String: * //host:port/name * host:注册表所在的主机(远程或本地),省略则默认为本地主机 * port:是注册表接受调用的端口号,省略则默认为1099,RMI注册表registry使用的著名端口 * name:是未经注册表解释的简单字符串 */ //Naming.bind("//host:port/name", h); Naming.bind("rmi://192.168.58.164:12312/Hello", h); System.out.println("HelloServer启动成功"); }catch(Exception e){ e.printStackTrace(); } } }
先创建注册表,然后才能在注册表中存储远程对象信息
7,编写客户端代码
package client; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; import server.Hello; public class HelloClient { public static void main(String[] args) { try { Hello h = (Hello)Naming.lookup("rmi://192.168.58.164:12312/Hello"); System.out.println(h.sayHello("zx")); } catch (MalformedURLException e) { System.out.println("url格式异常"); } catch (RemoteException e) { System.out.println("创建对象异常"); e.printStackTrace(); } catch (NotBoundException e) { System.out.println("对象未绑定"); } } }
相关推荐
### Spring RMI 使用详解 #### 一、Spring RMI 概述 Spring RMI 是 Spring 框架中用于支持远程方法调用(Remote Method Invocation)的功能模块。通过 Spring RMI, 开发者能够更加简便地搭建和管理远程服务。传统上...
【JAVA-RMI使用快速入门】 Java RMI(Remote Method Invocation,远程方法调用)是Java平台中用于构建分布式应用程序的一种核心技术。它允许Java对象在不同的Java虚拟机(JVM)之间进行交互,实现了"Write Once, ...
### RMI 使用实例详解 #### 一、RMI 概述 远程方法调用(Remote Method Invocation,简称 RMI)是 Java 平台提供的一种分布式计算技术,它允许开发者创建可跨网络调用的方法,就像在本地调用一样简单。RMI 的设计...
为了避免业务逻辑重新开发,顾使用spring rmi,把所有的bean作为rmi服务暴漏出来,在客户端只需要把项目依赖过来就ok,或者把以前的接口导入过来。 参考文档:...
本篇文章将深入探讨RMI的使用,包括其基本概念、工作原理、配置步骤以及常见问题。 一、RMI基本概念 RMI是一种协议,用于在Java环境中执行跨网络的远程方法调用。它使得一个Java对象可以调用另一个位于不同JVM上的...
6. **反序列化和序列化**:RMI使用Java的序列化机制来处理参数和返回值的网络传输。所有远程方法的参数和返回值都必须是可序列化的。 Java RMI还有许多高级特性,例如: - **多线程RMI**:RMI支持并发调用,多个...
1. **导出远程对象**:在服务器端,开发者创建远程对象实例,并使用`java.rmi.Naming.bind()`方法将其绑定到一个命名空间,如“/MyRemoteService”。 2. **生成存根和骨架**:使用`rmic`命令生成客户端存根和服务器...
RMI使用了动态代理、序列化、远程对象引用等技术,使得远程对象可以像本地对象一样被访问。 ### 实现原理 RMI的实现主要依赖于以下三个组件: 1. **远程接口(Remote Interface)**:定义了客户端可以远程调用的...
RMI使用JRMP(Java Remote Messaging Protocol)协议进行通信,JRMP是专为Java对象制定的协议,因此RMI具有Java"Write Once, Run Anywhere"的优点,是分布式应用系统的百分之百纯Java解决方案。 在RMI分布式应用...
4. **序列化**:由于Java对象不能直接在网络上传输,RMI使用Java的序列化机制将对象转换为字节流,然后在网络上传输,到达目的地后再反序列化恢复。 5. **异常处理**:RMI支持跨网络的异常处理,如果远程方法抛出...
5. **传输机制**:RMI使用Java序列化技术将方法调用和参数转化为字节流在网络上传输,服务器端接收到请求后执行相应操作,再将结果序列化回字节流返回给客户端。 现在,我们详细讲解如何实现这个会议服务: **1. ...
默认情况下,RMI使用匿名连接,但在生产环境中,通常需要配置安全策略以限制远程调用的权限。 此外,RMI还可以与EJB(Enterprise JavaBeans)、JMS(Java Message Service)等企业级技术结合,构建更复杂的分布式...
- **通信协议**:RMI使用TCP/IP进行网络通信,通过序列化对象和方法调用信息在客户端与服务器之间传递。 3. **RMI注册表**: - RMI注册表是RMI系统的核心组件,它由`rmiregistry`程序启动。默认情况下,RMI注册表...
### RMI使用学习小结 #### 一、RMI简介及应用场景 远程方法调用(Remote Method Invocation,简称RMI)是一种Java技术,允许开发者在不同的JVM(Java虚拟机)之间通过网络进行对象间的通信。它使得在一台机器上的...
《Synaptics RMI4 Specification》是一份详细介绍Synaptics RMI4技术标准的文档,该文档提供了关于如何使用Synaptics RMI4硬件接口的所有必要信息。Synaptics RMI4(Relay Module Interface)是一种用于触控板和触摸...
Java Remote Method Invocation(RMI)是一种分布式对象技术,允许使用 Java 编写分布式对象,不同的 Java 虚拟机(JVM)之间进行对象间的通讯。这使得应用程序(Application)可以远程调用方法,共享各个系统的资源...
5. **通信与序列化**:RMI使用Java的序列化机制将方法调用和参数转换为字节流,通过网络发送到远程对象,再将结果反序列化回对象。 现在,我们引入了“简单的加密技术”。在RMI中使用加密可以提高数据传输的安全性...
默认情况下,RMI使用匿名连接,这可能导致安全隐患。因此,通常需要配置安全策略和信任库,限制未经授权的访问。 7. **RMI与EJB(Enterprise JavaBeans)**:虽然EJB是更高级的分布式计算模型,但其底层也依赖于RMI...
默认情况下,RMI使用Java安全模型进行保护。可以通过调整策略文件来控制对远程对象的访问权限。 7. **RMI的局限性** - 性能:由于涉及网络通信,相比本地调用,RMI会带来一定的性能开销。 - 错误处理:RMI调用...
默认情况下,RMI使用Java的SSL支持进行加密,可以通过配置JVM参数进行安全设置。此外,所有远程方法都应抛出`RemoteException`,以处理可能出现的网络通信问题。 【标签】:“源码”表明这个框架提供了具体的实现...