Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。 相对于cxf等Web Service的实现,rmi显得相对轻巧,RMI也是最简单的,在一些小的应用中是最合适的。
缺点:1.RMI对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。 这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。
2.RMI是Java语言的远程调用,两端的程序语言必须是Java实现。
开始第一个demo:
第一步:定义接口 import java.rmi.Remote; import java.rmi.RemoteException; import java.util.List; import java.util.Map; import com.Rmi.Model.Student; import com.Rmi.Model.StudentResponse; /** * 构造一个返回各种复杂对象的测试 * 1. List * 2.Map * 3.Array * 3.Object * @author Administrator * */ public interface IStudentMsg extends Remote { /** * 获得student 的list集合 * @return */ public List<Student> findStudents() throws RemoteException; ; /** * 获得student相关的map类型 * @return */ public Map<String,String> findStudentMap() throws RemoteException; ; /** * 返回数组形式 * @return */ public Student[] findStudentArray() throws RemoteException; ; /** * 返回一个比较复杂的类型 * @return */ public StudentResponse findStudentClassMates() throws RemoteException; ; }
第二步,实现类 import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.Rmi.Imp.IStudentMsg; import com.Rmi.Model.Student; import com.Rmi.Model.StudentResponse; public class StudentMsg extends UnicastRemoteObject implements IStudentMsg{ public StudentMsg() throws RemoteException { super(); } private static final long serialVersionUID = 449315607221300521L; @Override public List<Student> findStudents() { List<Student> list = new ArrayList<Student>(); list.add(new Student("tABCD","高二")); list.add(new Student("ABCD","高二")); return list; } @Override public Map<String, String> findStudentMap() { Map<String,String> map = new HashMap<String ,String>(); map.put("1", "tssss"); map.put("2", "ddddd"); return map; } @Override public Student[] findStudentArray() { Student[] students = new Student[3]; students[0]=new Student("ABCD","构思"); students[1]=new Student("ABCD","gaosan"); return students; } @Override public StudentResponse findStudentClassMates() { StudentResponse respon = new StudentResponse(); respon.setName("ABCD"); List<Student> list = new ArrayList<Student>(); list.add(new Student("ABCD","高二")); list.add(new Student("涂ABCD","高二")); respon.setClassMates(list); return respon; } }
第三步:发布服务 IStudentMsg rstudent = new StudentMsg(); //本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上 LocateRegistry.createRegistry(8888); //把远程对象注册到RMI注册服务器上,并命名为rstudent //绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略) Naming.bind("rmi://localhost:8888/RStudentMsg",rstudent); System.out.println(">>>>>INFO:远程rstudent对象绑定成功!");
第四步:客户端
public class RmiClient{ public static void main(String args[]){ try { IStudentMsg studentMsg =(IStudentMsg) Naming.lookup("rmi://localhost:8888/RStudentMsg"); System.out.println(studentMsg.findStudentArray()[0].getClassName()); System.out.println(studentMsg.findStudentClassMates().name); System.out.println(studentMsg.findStudentMap().get("1")); } catch (NotBoundException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } } }
相关推荐
1. **RMI概念**:RMI是一种基于对象的远程调用机制,它允许Java对象像调用本地方法一样调用远程对象的方法。RMI系统包括客户端和服务器两部分,客户端通过接口与服务器交互,服务器则提供具体实现。 2. **RMI架构**...
学习和理解Java RMI对于开发分布式Java应用至关重要,它可以帮助你构建可扩展、高性能的应用程序,尤其适用于服务器集群和云环境。通过实践提供的"rmi"代码示例,你可以深入理解RMI的工作原理,并掌握如何在实际项目...
1. **定义远程接口**:首先,你需要创建一个继承自`java.rmi.Remote`的接口,声明你想在远程对象上调用的方法。这些方法通常抛出`java.rmi.RemoteException`,因为网络通信中可能出现的各种问题。 2. **实现远程...
Java Remote Method Invocation (RMI) 是Java平台提供的一种强大的分布式计算技术,允许在不同网络节点上的Java对象之间进行远程调用。RMI是构建分布式Java应用程序的基础,它简化了跨网络通信的过程,使得开发者...
这个"java rmi HelloWorld版(源码)"的压缩包文件提供了一个简单的RMI应用示例,帮助开发者了解和学习RMI的基本原理和使用。 RMI的核心概念包括: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口...
最近在学习代理模式,用到了java rmi远程调用,包含服务端和客户端,之前一直没有接触过,学习了java rmi远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程
通过分析这些文件,你可以学习到如何创建、配置和运行一个完整的RMI应用程序,这对于理解和应用Java的分布式计算能力非常有帮助。同时,这也是一个很好的实践项目,可以帮助你加深对RMI工作原理的理解。
Java RMI(Remote Method Invocation)是Java平台提供的一种分布式计算技术,它允许一个Java对象调用网络另一端的Java对象的方法,仿佛它们在同一个进程中执行。这个教程“Rmi.rar”显然包含了关于如何使用Java RMI...
Java RMI,全称为Java Remote Method Invocation,是Java平台中用于远程对象调用的技术。它允许Java对象在不同的Java虚拟机之间进行通信,仿佛它们在同一个...尽管如此,了解RMI仍然是学习Java分布式计算的重要一环。
描述中提到的"java rmi例子"表明其中可能包含了一个或多个实际的RMI应用实例,这对于学习和理解RMI的工作原理非常有帮助。 首先,让我们详细了解Java RMI的核心概念和组件: 1. **远程接口(Remote Interface)**...
1. **远程接口(Remote Interface)**:这是定义远程方法的Java接口,它标记为`java.rmi.Remote`的子接口。这些接口声明了可以在远程对象上执行的操作。 2. **远程实现(Remote Implementation)**:实现了远程接口...
学习和理解Java RMI,你需要掌握如何创建远程接口和实现,如何启动RMI服务器,如何在客户端进行远程对象的查找和调用,以及如何处理可能出现的网络异常。此外,对于序列化和网络通信的基础知识也是必不可少的。通过...
Java RMI是一种高级的通信机制,它允许在Java应用之间调用远程对象的方法,就像调用本地对象一样。RMI简化了分布式系统的设计,因为它抽象出了网络细节,使得开发者可以专注于业务逻辑。`java.rmi` 包提供了必要的...
Java RMI(Remote Method Invocation,远程...使用这个“java_rmi.zip”中的资源,你可以学习如何设置RMI环境,编写远程接口和实现,以及创建和调用远程对象。同时,了解相关的最佳实践和安全注意事项也是十分重要的。
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行方法调用,仿佛对象就在本地一样。RMI是Java在网络编程中的一个重要组成部分,尤其在...
Java 远程方法调用(Java RMI,Remote Method Invocation)是Java平台提供的一种用于构建分布式应用程序的...学习和理解Java RMI,可以帮助开发者构建可扩展的、跨网络的分布式应用程序,是Java开发者必备的一项技能。
通过这个完整的Java RMI通信例子,我们可以学习如何在实际项目中利用RMI来构建分布式系统,提升应用的可扩展性和灵活性。同时,理解RMI的工作原理也有助于我们更好地设计和实现其他分布式技术,如EJB、Web服务等。
Java Remote Method Invocation(Java RMI)是Java平台中用于实现分布式计算的一种技术。它允许Java对象在不同的Java虚拟机(JVMs)之间进行通信,仿佛它们是在同一个进程中执行一样。RMI使得开发者能够构建分布式...
1. **RMI机制**:RMI的核心是远程对象,它是一个在远程JVM上运行的Java对象,可以被本地对象像调用本地方法一样调用。RMI包括两部分:服务器端提供远程对象的实现,客户端通过 stub(代理)访问远程对象。 stub 负责...
这个"java_in_rmi.rar"压缩包包含了学习和精通RMI的基础资料,非常适合初学者深入理解这一主题。 首先,RMI的核心概念是远程方法调用,它允许一个Java对象调用位于另一台计算机上的对象的方法。这种机制依赖于Java...