RMI远程方法调用
RMI实例
编写远程接口
import java.rmi.Remote; import java.rmi.RemoteException; public interface IExample extends Remote { public int count(int i)throws RemoteException; }
生成辅助类
使用rmic生成存根和骨架
编写客户端
public class Client{ public static void main(String[] args) { IExample i=null; try { String target="rmi://localhost:1000/Example"; Remote remoteObject=Naming.lookup(target); i=(IExample)remoteObject; System.out.println(i.count(5));//简单的方法调用 }catch(Exception e) { System.err.println("error in lookup()"+e.toString()); } } }
实现远程实现
public class Example extends UnicastRemoteObject implements IExample { public static void main(String[] args) { Registry reg=null; try{ reg=LocateRegistry.createRegistry(1000); Example e=new Example(reg); }catch(Exception ee){} } public Example(Registry reg)throws Exception,RemoteException{ super(); reg.rebind("Example",this); } public int count(int i) throws RemoteException{ return i-1; } }
串行化与反串行化
串行化过程就是把对象转化成字节流。只需 对象实现了 Serializable接口即可。RMI远程 方法调用中的参数和返回值必须实现 java.io.Serializable或者java.rmi.Remote接口。 反串行化是把字节流转换成对象。
自己控制串行化
class demoSerial implements Externalizable{ int i; String s; public void writeExternal(ObjectOutput out) throws IOException{ out.writeObject(s); out.writeInt(i); } public void readExternal(ObjectInput in) throws IOException,ClassNotFoundException{ s=(String)in.readObject(); i=in.readInt(); } }
RMI架构
调用过程
当客户机调用RMI方法时,相当于调用Stub,RMI Stub通过编组(Marshaling)--把方法调用中的 参数转换成可以在网络上传输的数据格式,经远程 引用层和传输层向下,以网络分组的形式传递给服 务器,然后再次经传输层,向上穿过远程调用层和 骨架(Skeleton),RMI Skeleton负责拆解网络格 式的数据,恢复方法调用中的参数到达服务器程 序。 Skeleton利用方法调用,访问RMI实现类,RMI实 现类进行相应的处理,并将返回值返回Skeleton, Skeleton对返回值进行编组,通过网络传输到客户 机上。Stub再对收到的返回值进行分解,最后把分 解后的返回值送给客户机应用。
RMI:远程方法调用
Java EE 5教程 大连东软信息学院计算机系
主要内容
什么是RMI RMI的架构 串行化与反串行化 串行化实例 实例
什么是RMI
RMI(Remote Method Invocation) 是一种基 于Java的分布式编程模型,为java程序提供 远程访问服务接口。它允许运行在一个java 虚拟机上的对象调用运行在另一台java虚拟 机上的对象的方法,就像调用本地方法一样。
rmi2002标准
RMI 2002 标准是指关于远程方法调用(Remote Method Invocation,RMI)的Java 企业版(Java EE)规范的一部分。
RMI 是一种在Java 企业版中用于实现分布式对象通信的技术。
RMI 2002 标准主要定义了以下几个方面:1. 远程对象模型:RMI 2002 定义了远程对象模型,包括远程接口、远程对象、远程引用等概念,以及如何在不同Java 虚拟机(JVM)之间传递对象引用和调用远程方法。
2. 远程方法调用:RMI 2002 规定了如何通过远程引用调用远程对象的方法。
这包括方法调用的参数传递、返回值处理以及异常处理等。
3. 对象传输:RMI 2002 定义了对象传输机制,支持将Java 对象序列化为二进制数据并在网络中传输。
这使得远程对象能够在不同JVM 之间进行通信。
4. 命名服务:RMI 2002 提供了命名服务,用于在分布式系统中查找和引用远程对象。
命名服务基于Java Naming and Directory Interface(JNDI)规范。
5. 事务支持:RMI 2002 支持事务处理,确保分布式对象之间的操作具有原子性和一致性。
6. 安全机制:RMI 2002 提供了安全机制,包括身份验证、授权和加密等,以确保分布式系统中的数据和对象安全。
7. 国际化支持:RMI 2002 支持Java 国际化规范,使得分布式应用程序可以处理多种语言和文化。
RMI 2002 标准为实现分布式系统提供了基础架构支持。
它使得Java 开发人员可以轻松地创建、部署和维护分布式应用程序。
在实际应用中,RMI 2002 与其他Java EE 技术(如EJB、JMS 等)紧密结合,共同构建高性能、可扩展的分布式系统。
JAVA_RMI使用快速入门
JAVA_RMI使用快速入门Java RMI(Remote Method Invocation,远程方法调用)是一种用于实现分布式系统的Java API,它允许在不同的Java虚拟机上通过网络调用远程对象的方法。
在这篇文章中,我们将快速入门Java RMI,并了解如何使用它来创建一个简单的分布式系统。
1.理解RMI的概念RMI的基本思想是将远程调用看作是本地调用的一种特殊形式,在RMI中,客户端和服务器可以通过网络传输Java对象的引用。
客户端可以通过远程对象的引用来调用它的方法,就像调用本地对象一样。
2.创建远程接口首先,我们需要定义一个远程接口,它列出了远程对象上可用的方法。
这个接口必须扩展java.rmi.Remote接口,并且每个方法都必须声明抛出java.rmi.RemoteException异常。
下面是一个简单的例子:```javaimport java.rmi.Remote;import java.rmi.RemoteException;public interface Hello extends RemoteString sayHello( throws RemoteException;```3.实现远程接口接下来,我们需要实现远程接口,并发布它作为一个RMI对象。
通过扩展java.rmi.server.UnicastRemoteObject类并实现远程接口,我们可以创建一个远程对象。
下面是实现上面接口的一个例子:```javaimport java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class HelloImpl extends UnicastRemoteObject implements Hellopublic HelloImpl( throws RemoteExceptionsuper(;}public String sayHello( throws RemoteExceptionreturn "Hello, world!";}```4.注册远程对象在将远程对象发布到网络之前,我们需要创建一个注册表来管理远程对象的绑定。
rmi认证标准(一)
rmi认证标准(一)RMI认证标准简介RMI(Remote Method Invocation)是一种在分布式系统中通过网络实现远程方法调用的技术。
它允许程序在不同的Java虚拟机(JVM)上进行通信和交互,提供了便捷的远程对象访问和调用方式。
RMI认证的重要性在分布式系统中,因为涉及跨网络的通信,安全性成为一个非常重要的问题。
RMI认证标准的出现,旨在确保远程调用的安全性和可靠性。
RMI认证标准的原则RMI认证标准主要基于以下原则:1.身份认证:确保通信双方的身份真实可信,避免伪造身份进行非法操作。
2.数据完整性:保证数据在传输过程中不被篡改或损坏,防止信息泄露和数据丢失。
3.数据机密性:提供数据传输的加密机制,防止信息被窃取或监听。
4.可靠性:保证通信的稳定性和可靠性,避免数据丢失或通信中断。
RMI认证实现方式以下是几种常用的RMI认证实现方式:•基于密码的认证:通信双方在建立连接时,通过验证密码或密钥来进行身份认证。
这种方式简单高效,但若密码泄露则安全性受到威胁。
•基于数字证书的认证:通过使用数字证书对通信双方的身份进行验证。
数字证书包含了公钥、证书颁发机构(CA)的签名等信息,通过验证证书的合法性,可以确保通信双方的身份真实可信。
•基于加密算法的认证:使用对称加密算法或公钥加密算法对通信数据进行加密,确保数据的机密性和完整性。
加密算法的选择和使用密钥管理等方面对安全性至关重要。
•基于防火墙的认证:通过防火墙对网络流量进行过滤和验证,仅允许符合一定要求的通信通过。
防火墙可以配置访问控制策略,限制只有通过认证的主机才能建立连接,从而增加通信的安全性。
RMI认证的未来发展随着互联网技术的不断发展,RMI认证标准也在不断完善和演进。
未来,我们可以预见以下发展趋势:1.多因素认证:结合密码、生物特征等多种因素进行认证,提高身份验证的安全性。
2.智能合约认证:通过智能合约实现自动化、去中心化的认证过程。
远程方法调用
Software Engineering Network Programming
10.2 创建远程方法调用
编写远程接口 以下例程是HelloService接口的源程序。在这个接口中声明 了echo()和getTime()两个方法,它们都声明抛出 RemoteException。 例程HelloService.java package hello; import java.util.Date; import java.rmi.*; public interface HelloService extends Remote{ public String echo(String msg) throws RemoteException; public Date getTime() throws RemoteException; }
Software Engineering Network Programming
10.1 RMI 概述
1、什么是RMI: RMI是一种计算机之间对象互相 调用对方函数,启动对方进程的一种机制,使用这 种机制,某一台计算机上的对象在调用另一台计算 机上的方法时,使用的程序语法规则和在本机上对 象间的方法调用的语法规则一样
Software Engineering Network Programming
10.1 RMI 概述
3、RMI组成 1.一个需要这个远程服务的客户端程序 2.远程服务的接口定义 3.远程服务接口的具体实现 4.桩(Stub)和框架(Skeleton)文件 5.一个运行远程服务的服务器 6.一个RMI命名服务,它允许客户端去发现这个远程服务 7.类文件的提供者(一个HTTP或者FTP服务器)
Software Engineering Network Programming
rmi和ldap协议
rmi和ldap协议RMI和LDAP协议引言:在计算机网络和系统中,协议是确保不同系统之间能够进行有效通信的关键。
RMI(远程方法调用)和LDAP(轻量级目录访问协议)是两种常用的网络协议。
本文将介绍RMI和LDAP协议的基本概念、作用以及它们在实际应用中的应用场景和注意事项。
一、RMI协议RMI(Remote Method Invocation)是一种允许在不同Java虚拟机上的对象之间进行远程调用的协议。
它提供了一种机制,使得在分布式系统中的对象能够像调用本地对象一样进行方法调用。
RMI 协议基于Java语言的反射机制,通过序列化和网络传输实现远程对象之间的通信。
RMI协议的作用:1. 远程调用:RMI协议允许在不同机器上的Java对象之间进行远程方法调用。
这使得分布式系统中的不同部分能够通过RMI协议进行通信,共享数据和资源。
2. 分布式计算:RMI协议为分布式计算提供了一种有效的机制。
通过RMI协议,可以在不同机器上部署不同的对象,实现任务的分发和并行处理。
3. 对象序列化:RMI协议通过对象的序列化和反序列化,将对象的状态在网络上传输。
这使得远程对象能够在不同机器上进行传递和复制。
RMI协议的应用场景:1. 分布式系统:RMI协议广泛应用于分布式系统中,例如基于Java 的Web应用程序和企业应用程序。
通过RMI协议,不同的分布式组件可以进行远程方法调用,实现数据和资源的共享。
2. 远程对象管理:RMI协议可以用于管理远程对象,例如远程管理服务器或远程配置服务器。
通过RMI协议,可以远程调用对象的方法,实现对远程对象的管理和配置。
3. 分布式计算:RMI协议可以用于实现分布式计算,例如在一个集群中同时处理大量的任务。
通过RMI协议,可以将任务分发给不同的节点进行并行处理,提高计算效率。
RMI协议的注意事项:1. 安全性:RMI协议的远程调用可能存在安全风险,例如远程代码执行和数据泄露。
rmi方法
"RMI"可以指代多种不同的技术或概念,具体取决于上下文。
以下是几种可能的解释:1. 远程方法调用(Remote Method Invocation):在计算机网络编程中,RMI 是一种编程模型,它允许一个Java虚拟机(JVM)上的对象调用另一个JVM上对象的方法。
这种调用像是在进行本地方法调用一样简单直观,但实际上涉及到网络通信。
RMI使用了Java的序列化机制来传输对象状态,并支持不同类型的传输协议,包括Java RMI、HTTP、HTTPS等。
2. 报告管理接口(Report Management Interface):在企业应用程序中,RMI 可能指的是用于管理和处理报告的接口。
这些报告可能涉及财务数据、业务性能、客户信息等,并且可能用于决策支持系统(DSS)。
3. 资源管理接口(Resource Management Interface):在计算机系统管理中,RMI可能指的是用于管理系统资源的接口,如CPU、内存、存储等。
4. 反射性方法调用(Reflective Method Invocation):在某些编程框架中,RMI可能指的是使用反射机制来调用方法的方式。
反射机制允许程序在运行时检查和修改其结构和行为。
如果你指的是远程方法调用(RMI),那么在Java中使用RMI通常涉及以下步骤:- 创建一个远程接口,该接口扩展了Java的Remote接口,并定义了需要远程调用的方法。
- 实现这个远程接口,并将实现类暴露给网络。
- 在客户端,创建这个远程接口的代理对象,通过网络调用远程服务器上的方法。
为了使用Java RMI,还需要使用Java RMI库中的类和方法来配置和启动网络通信。
这可能包括使用RMISocketFactory来创建套接字,以及使用RMIContext 来管理安全性和其他网络通信的细节。
请注意,随着Java技术的不断发展,RMI可能不再是唯一的远程调用解决方案,其他技术如Web服务(SOAP和RESTful)、消息传递(如RabbitMQ和Apache Kafka)等,也可能用于实现分布式系统中的远程方法调用。
介绍一下RMI的基本概念
介绍一下RMI的基本概念什么是RMIRMI(Remote Method Invocation)远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。
RMI的用途1、分布式体系结构为什么要使用分布式计算呢?当我们想与多个用户或客户机共享一个中央资源(如一个数据库)时,就会使用分布式计算。
分布式计算用来利用多个系统的组合计算能力,以便比在单个系统上更有效或更快地解决问题。
可以用多种方法配置多个计算机系统以共享处理,包括共享内存、共享磁盘或只是共享一条公共通信通道。
最新的技术允许物理上相隔很远的系统能够在处理计算问题时协同工作。
关于利用计算能力这一主题,因特网及伴随的通信协议TCP/IP 的出现已使无数的计算机系统史无前例地连接起来。
对一些应用程序来说,能够利用如此多的计算功能来解决问题是令人满意的。
甚至更吸引人的是,大多数计算机系统都有充足的空闲时间,可以帮助解决其它问题。
将来,网格计算会利用分布式计算能力进行出售,这与电力行业出售电能非常相似。
2、Java 分布式对象编程技术RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。
只要按照RMI规则设计程序,可以不必再过问在RMI之下的网络细节了,如:TCP和Socket等等。
任意两台计算机之间的通讯完全由RMI负责。
调用远程计算机上的对象就像本地对象一样方便。
RMI应用程序分类依据RMI应用程序各部分职责,可对应用程序进行如下分类:服务器程序:服务器程序将创建多个远程对象,并使每个对象能够被引用。
等待客户端调用创建好的远程对象上的方法。
客户端程序:从服务端程序中得到一个或多个远程对象的引用。
客户端能用此引用调用远程对象上的方法。
对等计算程序:双方地位相等,互为对方的服务器和客户端。
java方法跨系统调用方法
java方法跨系统调用方法Java作为一种广泛应用于企业级应用的编程语言,其跨系统调用方法的使用十分重要。
在企业级应用中,常常需要调用其他系统的功能,比如数据库、消息队列等,而跨系统调用方法可以帮助我们方便地实现这些功能。
本文将介绍Java中跨系统调用方法的实现方式。
一、Java中的跨系统调用方法Java中的跨系统调用方法主要有以下几种:1. 远程方法调用(Remote Method Invocation,简称RMI)RMI是Java中的一种机制,允许在不同的Java虚拟机之间进行远程方法调用。
通过RMI,我们可以在一个Java虚拟机中调用另一个Java虚拟机中的对象的方法,而不需要进行任何网络编程。
RMI 使用Java的序列化机制来传递参数和返回值。
2. Java消息服务(Java Message Service,简称JMS)JMS是一种Java中的消息传递规范,用于在不同的Java应用程序之间传递消息。
JMS可以实现点对点通信和发布/订阅通信模式。
在JMS中,消息被发送到一个消息队列中,然后被接收者从队列中读取。
JMS实现了Java应用程序之间的解耦,使得应用程序可以独立地进行开发和部署。
3. Web服务Web服务是一种跨平台、跨语言的服务,可以通过HTTP协议进行调用。
Web服务通常使用SOAP协议进行通信,SOAP是一种基于XML的协议,用于在网络上交换结构化的和可扩展的信息。
通过Web服务,我们可以方便地实现不同系统之间的互操作性。
4. RESTful服务RESTful服务是一种基于HTTP协议的Web服务,它使用HTTP协议中的GET、POST、PUT、DELETE等方法来实现对资源的操作。
RESTful服务主要使用JSON或XML作为数据格式,具有轻量、灵活、易于扩展等特点。
二、实现跨系统调用方法的步骤实现跨系统调用方法的步骤如下:1. 定义接口在调用其他系统的功能时,需要定义一个接口,该接口定义了需要调用的方法和参数。
RPC、RMI、HTTP、REST的区别
RPC、RMI、HTTP、REST的区别
RPC、RMI、HTTP、REST的区别
RPC:远程服务调⽤(Remote Procedure Call),加上Protocol后可以称为远程过程调⽤协议,可以⽤不同的语⾔实现,可以借
⽤HTTP协议或者其他协议来实现,⼀般都是通过基于TCP/IP的⾃定义协议实现。
HTTP协议和TCP/IP协议有什么关系呢?HTTP是应⽤层协议,TCP/IP是传输层协议。
HTTP协议请求中会包含很多内容,传输效率要低,⼀般RPC实现都不采⽤HTTP协议;RPC采⽤⾃定义的TCP协议,可以精简报⽂格式,⼀般都是采⽤⼆进制形式,客户端和服务端采⽤统⼀的序列化和反序列化⽅式保持数据统⼀,效率更⾼,所以⼀般企业内部通信都是采⽤⾃定义TCP的RPC协议,传输效率⾼。
HTTP:超⽂本传输协议(HyperText Transfer Protocal),是应⽤层的⼀种⽹络传输协议,⼀般格式都是json或者xml,也是基于TCP/IP实现的。
REST:是⼀种架构风格,是基于HTTP协议的,可以理解称⼀种API的规范,⽐如查询都是GET请求,新增都是POST,修改是PUT,删除是DELETE等。
RMI:远程⽅法调⽤(Remote Method Invocation),是⼀种⽤于实现RPC的java API,仅仅应⽤在java程序上,依赖于JVM,因为他仅仅⽀持从⼀个JVM到另⼀个JVM的调⽤。
企业内部的微服务数据传输都是采⽤⾃定义的rpc实现的,传输效率更⾼;http⼀般是⾯向⽤户的,规范统⼀,⽤户使⽤起来⽅便,直接通过浏览器地址访问接⼝即可。
JAVARMI和JNDI简单学习
JAVARMI和JNDI简单学习⼀、RMI概述 java RMI(remote method invocation)即远程⽅法调⽤,是允许运⾏在⼀个java虚拟机上的对象调⽤运⾏在另外⼀个java虚拟机上的对象的⽅法,JAVA RMI实现JAVA程序之间跨越JVM的远程通信。
通过RMI可以让调⽤远程JVM上对象⽅法,仿佛调⽤本地JVM上对象⽅法⼀样简单、快捷。
⼆、RMI框架RMI主要有三个⾓⾊:RMI客户端、RMI服务端、注册表RMI过程⼤体如下: 1.客户端从RMI注册表中查询并获取远程对应引⽤。
客户端⾸先会与Stub进⾏交互,stub将远程⽅法所需的参数进⾏序列化后,传递给远程应⽤层RRL 2.stub和远程对象具有相同的接⼝和⽅法列表,当客户端调⽤远程对象时,实际是有stub对象代理的。
RRL将stub本地引⽤转换为服务端上对象的远程引⽤后,再将调⽤传递给传输层,传输层执⾏TCP发送 3.RMI服务端传输层监听到请求后,将引⽤转发给服务端的RRL。
4.服务端RRL将客户端发送的远程应⽤转换为本地虚拟机引⽤后,传递给Skeleton。
5.Skeleton读取参数,最后由服务端进⾏实际⽅法调⽤。
6.如果RMI客户端调⽤存在返回值,则以此向下传递。
7.客户端接收到返回值后,再以此向上传递。
然后由stub反序列化返回值,最终传递给RMI客户端相关类关系如下:三、RMI开发流程1.RMI服务端(1)远程调⽤对象类: 1.1 定义⼀个继承Remote接⼝的interface A,接⼝中的⽅法需要抛出RemoteException 1.2 远程调⽤对象类需继承UnicastRemoteObject类和interface A(2)启动注册表并绑定对象2.RMI客户端(1)定义⽤于接收远程对象的Remote⼦接⼝,只需实现java.rmi.Remote接⼝即可。
但要求必须与服务器端对等的Remote⼦接⼝保持⼀致,即有相同的接⼝名称、包路径和⽅法列表等(2)通过注册表查询需要调⽤的对象,并强制转换成客户端定义的类(3)进⾏⽅法调⽤远程调⽤对象类import java.rmi.Remote;import java.rmi.RemoteException;public interface Hello extends Remote {public String welcome(String name) throws RemoteException;}import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class HelloImpl extends UnicastRemoteObject implements Hello{public HelloImpl() throws RemoteException {}public String welcome(String name) throws RemoteException {return "Hello, " + name;}}创建RMI服务端import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;public class Server {public static void main(String[] args) throws RemoteException {// 创建对象Hello hello = new HelloImpl();// 创建注册表Registry registry = LocateRegistry.createRegistry(10999);// 绑定对象到注册表,并给他取名为helloregistry.rebind("hello",hello);System.out.println("创建服务端成功!");}}创建RMI客户端import java.rmi.NotBoundException;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;public class Client {public static void main(String[] args) throws RemoteException, NotBoundException {// 获取到注册表的代理Registry registry = LocateRegistry.getRegistry("localhost", 10999);// 利⽤注册表的代理去查询远程注册表中名为hello的对象Hello hello = (Hello) registry.lookup("hello");// 调⽤远程⽅法System.out.println(hello.welcome("tridentj"));}}简单本地运⾏的效果如下:也可以通过Naming类创建,Naming相当于对Registry进⾏了封装,部分Naming源代码如下:Naming封装简单⽰例:import java.rmi.Naming;import java.rmi.registry.LocateRegistry;public class NamingServer {public static void main(String[] args) {运⾏效果如下:四、JNDIJNDI (JAVA Naming And Directory Interface )是JAVA 命名和⽬录接⼝。
