JAVA_RMI&COMBRA
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.注册远程对象在将远程对象发布到网络之前,我们需要创建一个注册表来管理远程对象的绑定。
javaRMI及简单实例
远程方法调用实验报告1.摘要简单介绍了java中的RMI框架的基本原理及应用,给出了java 中创建一个RMI应用的基本步骤。
在此基础上设计了一个采用RMI技术实现远程方法调用的实验,客户端调用服务器端的远程对象的方法,获取服务器端的系统时间,将结果返回客户端。
此外还对实验结果还进行了分析。
2.实验背景RMI采用客户/服务器通信方式。
在服务器上部署了提供各种服务的远程对象,客户端请求访问服务器上的远程对象的方法。
如图1所示,是RemoteServiceClass一个远程对象,它运行在服务器上,客户端请求调用RemoteServiceClass对象的echo()方法。
图1 客户端请求调用服务器上的远程对象的方法如图2所示,RMI采用代理来负责客户和远程对象之间通过Socket进行通信的细节。
RMI框架为远程对象分别生成了客户端代理和服务器端代理。
位于客户端的代理类称为存根(Stub),位于服务器端的代理类称为骨架(Skeleton)。
图2 RMI框架采用代理来封装通信细节当客户端调用远程对象的一个方法时,实际上是调用本地存根对象的相应方法。
存根对象和远程对象具有同样的接口。
存根采用一种与平台无关的编码方式,把方法的参数编码为字节序列,这个编码过程称为参数编组。
RMI主要采用java序列化机制进行参数编组。
接着,存根把请求信息发送给服务器,服务器端接收到客户端的请求信息,然后由相应的骨架对象来处理这一请求信息,把处理后的返回值或者异常编组后发送给客户。
客户端的存根接收到服务器发送过来的编组后的返回值或者异常,再对它进行反编组,就得到调用远程方法的返回结果。
存根与骨架类通过Socket来通信。
开发人员无须手工编写客户端的存根类及服务器端的骨架类,它们都由RMI框架创造。
在JDK5.0以前的版本中,需要用rmic命令来为远程对象生成静态的代理类(包括存根和骨架类)。
而在JDK5.0中,RMI框架会在运行时自动为远程对象生成动态代理类(包括存根和骨架类),从而更彻底封装了RMI 框架的实现细节,简化了RMI框架的使用方式。
浅谈JavaRMI
i ot j v m irg s r. : p m r a a . .e i ty } ip r a a r isr e . m ot j v a .e vr : .
p b i l s e f c T m x e d n c s R m t O j c i l m n s u lc ca s Pr e t ie e tn sU ia t eo eb e t m ee t p
它们分别对应的是根 (tb和干 ( ee o) su ) s ltn . k
i p r a a n t } m o t j v. e . : ip r a a r . m o t j v mi . :
RI M 全部的宗 旨就是可能简化远程接口对象的使用 。我 们客户程序中要做的唯一一件额外事情是查找从服务器取 回
确 计 时 服 务
/ P re t ie j v / ef cT m .a a / W e i p e e t t o f t e P r e t ie r m t b e t /h m lm na in o h e fc Tm eo e o jc
a k ̄ e p c te t: s
器端的传输层传递回客户端,再向上 经传输层和远程调用层 返回。最后 ,占位程序获得返回值 。 而要完成 以下调用过程 ,需要 有 以下几个 步骤 : 1 、创建一个远程接 口
式计算将 工作量分散到多个 J v a a虚拟机上。
2 实现远程对象( 务器端程序 ) 、 服 3 、生成 占位程 序和骨干网( 务器端 程序 ) 服 4 、编写服务 器程序 5 、编写客户程序
其主要功能是 :使用户能访 问在另一主机上的 Jv aa对象,并 远程调用其方法。程序的对象是客户 ,而远程对象是服务器。 远程对象也可以是另一个远程服务对象 的客户 。通过使用持 续性 ( 串行化和解 串行化) ,本地对象和原始类型值可以作为
rmi认证标准(一)
rmi认证标准(一)RMI认证标准简介RMI(Remote Method Invocation)是一种在分布式系统中通过网络实现远程方法调用的技术。
它允许程序在不同的Java虚拟机(JVM)上进行通信和交互,提供了便捷的远程对象访问和调用方式。
RMI认证的重要性在分布式系统中,因为涉及跨网络的通信,安全性成为一个非常重要的问题。
RMI认证标准的出现,旨在确保远程调用的安全性和可靠性。
RMI认证标准的原则RMI认证标准主要基于以下原则:1.身份认证:确保通信双方的身份真实可信,避免伪造身份进行非法操作。
2.数据完整性:保证数据在传输过程中不被篡改或损坏,防止信息泄露和数据丢失。
3.数据机密性:提供数据传输的加密机制,防止信息被窃取或监听。
4.可靠性:保证通信的稳定性和可靠性,避免数据丢失或通信中断。
RMI认证实现方式以下是几种常用的RMI认证实现方式:•基于密码的认证:通信双方在建立连接时,通过验证密码或密钥来进行身份认证。
这种方式简单高效,但若密码泄露则安全性受到威胁。
•基于数字证书的认证:通过使用数字证书对通信双方的身份进行验证。
数字证书包含了公钥、证书颁发机构(CA)的签名等信息,通过验证证书的合法性,可以确保通信双方的身份真实可信。
•基于加密算法的认证:使用对称加密算法或公钥加密算法对通信数据进行加密,确保数据的机密性和完整性。
加密算法的选择和使用密钥管理等方面对安全性至关重要。
•基于防火墙的认证:通过防火墙对网络流量进行过滤和验证,仅允许符合一定要求的通信通过。
防火墙可以配置访问控制策略,限制只有通过认证的主机才能建立连接,从而增加通信的安全性。
RMI认证的未来发展随着互联网技术的不断发展,RMI认证标准也在不断完善和演进。
未来,我们可以预见以下发展趋势:1.多因素认证:结合密码、生物特征等多种因素进行认证,提高身份验证的安全性。
2.智能合约认证:通过智能合约实现自动化、去中心化的认证过程。
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协议的远程调用可能存在安全风险,例如远程代码执行和数据泄露。
利用JAVA RMI开发分布式应用
1 .R l系 统 运 行 机 理 M
RM I 用 程 序 通 常 包 括 两 个 独 立 的 程 序 :服 务 应 器 程 序 和 客 户 机 程 序 。 典 型 的 服 务 器 应 用 程 序 将 创
基 于 Jv a a语 言 的 体 系 标 准 。 遵 循 这 个 标 准 . 们 可 以 很 容 易 地 创 建 " a a Jv ” 人 Jv对 aa 的 分 布 式 应 用 程 序 . 能 够 满 足 分 布 式 计 算 的应 用 模 式 . 实现 了在运 行 于 不 同虚
估 了 分 布 计 算 的 趋 势 并 比 较 了 多 种 分
开 发 的 应用 系统 可 以部署 在任 何 支持 J RE ( a a Ru Jv n En i n n a a 行 环 境 )的 平 台 上 。 但 由 于 J M P vr me t v 运 o J R 是专为 Jv a a对 象 制 定 的 . 因 此 . RM I 于 用 非 J v 对 aa
邱 制 su t b和 s eeo 。 远 程 对 象 的 su k lt n t b担 当 远 程 对 象
值 直 接 得 到 对 象 引 用 。 从 调 用 方 式 来
看 . RM I RP ( 程 过 程 调 用 ) 有 很 和 C 远
庆
垡
大 的 相 似 之 处 . 但 二 者 之 间 最 大 的 不 同 在 于 :RMI 面 向 对 象 的 . 而 RP 是 基 是 C
应刊
拟 机 的 对 象 之 间 的 方 法 调 用 。 在 一 个 纯
粹由J AVA 组 成 的 分 布 式 系 统 中 ,J v 对 aa
象 的 引 用 . 然 后 调 用 远 程 对 象 的 方 法 。 RM I为 服 务
java跨项目调用方法
java跨项目调用方法Java跨项目调用方法背景在开发多个独立的Java项目时,有时我们会遇到需要在一个项目中调用另一个项目中的方法的情况。
这种情况下,我们就需要跨项目进行方法调用。
本文将介绍几种常用的方法来实现Java跨项目调用。
1. 通过Java RMI实现跨项目调用Java RMI(Remote Method Invocation)提供了一种机制,使得一个Java应用可以调用运行在另一个Java虚拟机上的对象的方法。
通过使用Java RMI,我们可以在不同的项目中建立远程连接,实现方法的调用。
使用Java RMI实现跨项目调用的步骤如下:1.定义接口:在被调用项目中定义接口,并在接口中声明需要暴露给其他项目调用的方法。
2.实现接口:在被调用项目中实现接口,并在实现类中实现接口中声明的方法。
3.启动RMI Registry:运行被调用项目时,需要启动RMIRegistry,用于注册被调用对象。
4.注册对象:在被调用项目中,将实现类注册到RMI Registry中,以供其他项目调用。
5.获取远程对象:在调用项目中,通过RMI Registry获取远程对象的引用。
6.调用方法:通过远程对象的引用,调用被调用项目中的方法。
2. 使用WebService实现跨项目调用WebService是一种基于Web的服务技术,通过使用HTTP协议和XML格式进行通信。
我们可以通过在被调用项目中发布一个WebService,然后在调用项目中通过SOAP协议调用WebService的方式实现跨项目方法的调用。
使用WebService实现跨项目调用的步骤如下:1.定义接口:在被调用项目中定义接口,并在接口中声明需要暴露给其他项目调用的方法。
2.实现接口:在被调用项目中实现接口,并在实现类中实现接口中声明的方法。
3.发布WebService:在被调用项目中通过WebService框架(如Apache CXF、Apache Axis等)发布WebService。
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)等,也可能用于实现分布式系统中的远程方法调用。
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. 定义接口在调用其他系统的功能时,需要定义一个接口,该接口定义了需要调用的方法和参数。
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 命名和⽬录接⼝。
RMI系统原理及使用方法
RMI系统原理及使用方法论文导读:Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。
关键词:RMI,JAVA,分布式远程方法调用Java RMI(RomoteMethod Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。
其实它可以被看作是RPC的Java版本。
但是传统RPC并不能很好地应用于分布式对象系统。
而Java RMI则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Rrotocol)进行通信。
JRMP是专为Java的远程对象制定的协议。
因此,Java RMI具有Java的”Write Once,Run Anywhere”的优点,是分布式应用系统的百分之百纯Java解决方案。
用Java RMI开发的应用系统可以部署在任何支持JRE的平台上。
发表论文。
但由于JRMP是专为Java对象制定的,因此,RMI对用用非Java语言开发的应用系统的支持不足。
不能与用非Java语言书写的对象进行通信。
RMI系统原理RMI应用程序通常包括两个独立的程序:服务器程序和客户机程序。
典型的服务器应用程序将创建多个远程对象,使这些远程对象能够被引用,然后等待客户机调用这些远程对象的方法。
而典型的客户机程序则从服务器中得到一个或多个远程对象的引用,然后调用远程对象的方法。
RMI为服务器和客户机进行通信和信息传递提供了一种机制。
在与远程对象的通信过程中,RMI使用标准机制:Stub和Skeleton。
远程对象的Stub担当远程对象的客户本地代表或代理人角色。
发表论文。
调用程序将调用本地Stub的方法,而本地Stub将负责执行对远程对象的方法调用。
rmi协议
RMI协议RMI(Remote Method Invocation)是Java中的一种远程通信协议。
它允许在不同Java虚拟机(JVM)之间进行方法调用。
RMI协议允许程序员在分布式系统中使用面向对象的编程方式。
RMI协议的概述RMI协议通过Java的序列化机制和远程代理实现了远程方法调用。
它允许在不同的JVM之间传递对象引用,从而调用远程对象的方法。
RMI协议的核心是Java远程对象和远程接口。
Java远程对象Java远程对象是可以在不同的JVM之间传递的对象。
它们必须实现java.rmi.Remote接口,并且其方法必须声明java.rmi.RemoteException异常。
Java远程对象可以通过在服务器上创建对象实例,然后将其绑定到RMI注册表中,从而使客户端可以访问它们。
远程接口远程接口是一组方法的集合,这些方法可以通过RMI协议在不同的JVM之间进行调用。
远程接口必须扩展java.rmi.Remote接口,并且其方法也必须声明java.rmi.RemoteException异常。
远程接口定义了客户端可以调用的方法列表。
RMI的工作原理RMI协议的工作原理可以分为以下几个步骤:1.服务器端创建并导出远程对象:服务器程序创建远程对象,并通过RMI框架将其导出为远程对象。
服务器上的RMI注册表负责管理导出的远程对象。
2.客户端查找远程对象:客户端程序通过RMI注册表查找服务器端导出的远程对象。
RMI注册表返回一个远程对象的引用。
3.客户端通过远程对象调用方法:客户端使用远程对象引用来调用远程对象的方法。
RMI框架处理方法调用,并通过网络将方法调用请求发送给服务器端。
4.服务器端执行方法:服务器端接收到客户端的方法调用请求,并执行相应的方法。
服务器端的方法执行结果通过网络返回给客户端。
5.客户端接收方法执行结果:客户端接收到服务器端返回的方法执行结果,并继续执行后续的操作。
RMI协议的优势RMI协议具有以下优势:1.简化分布式编程:RMI协议使得分布式系统中的方法调用变得简单,程序员可以像调用本地方法一样调用远程方法。
java内调用远程接口的方法
java内调用远程接口的方法Java内调用远程接口的方法主要有两种方式:使用Java RMI(远程方法调用)和使用Web服务。
1. 使用Java RMI:- 在远程接口所在的项目中定义接口和实现类,并继承java.rmi.Remote接口。
- 将接口和实现类编译打包成JAR文件,并将JAR文件发布到远程服务器上。
- 在调用方项目中,使用java.rmi.Naming类的lookup()方法获取远程接口的实例。
- 通过远程接口实例调用接口中定义的方法。
示例代码:```java// 远程接口定义public interface RemoteService extends java.rmi.Remote {public String sayHello() throws java.rmi.RemoteException;}// 远程接口实现类public class RemoteServiceImpl extends java.rmi.server.UnicastRemoteObject implementsRemoteService {public RemoteServiceImpl() throws java.rmi.RemoteException {super();}public String sayHello() throws java.rmi.RemoteException {return "Hello, World!";}}// 调用方代码public class Client {public static void main(String[] args) {try {// 获取远程接口实例RemoteService remoteService = (RemoteService) java.rmi.Naming.lookup("rmi://localhost/RemoteService");// 调用远程接口方法String result = remoteService.sayHello();System.out.println(result);} catch (Exception e) {e.printStackTrace();}}}```2. 使用Web服务:- 在远程接口所在的项目中定义接口和实现类,并使用@WebService注解标记接口和实现类。
rmi远程调用工作原理
rmi远程调用工作原理RMI(远程方法调用)是一种用于实现远程通信的Java API。
它允许一个Java对象在不同的Java虚拟机(JVM)之间进行通信和交互。
RMI的工作原理是通过序列化和反序列化来实现的。
在RMI中,有三个主要的角色:远程对象、客户端和服务器。
远程对象是实现了远程接口的Java对象,它可以在不同的JVM之间进行传输和调用。
客户端是发起远程调用的一方,而服务器是提供远程服务的一方。
RMI的工作流程如下:1. 客户端通过查找RMI注册表来获取远程对象的引用。
RMI注册表是一个存储远程对象引用的服务,客户端可以通过查找注册表来获取远程对象的地址。
2. 客户端通过远程对象的引用调用远程方法。
在调用远程方法之前,客户端需要序列化方法的参数,并将序列化后的数据发送给服务器。
3. 服务器接收到客户端发送的请求后,通过反序列化恢复方法的参数,并执行方法体中的代码。
服务器可以访问本地资源,如数据库或文件系统,并根据客户端的请求进行相应的处理。
4. 服务器执行完方法后,将方法的返回值序列化并发送给客户端。
5. 客户端接收到服务器发送的返回值后,通过反序列化恢复返回值,并继续执行后续的代码。
需要注意的是,在RMI中,远程对象和其所在的JVM之间通过网络进行通信。
为了实现远程通信,RMI使用了Java的序列化机制。
序列化是将一个Java对象转换成字节流的过程,而反序列化则是将字节流转换回Java对象的过程。
RMI的序列化机制可以确保远程对象在不同的JVM之间进行传输和重建。
当客户端调用远程方法时,RMI会自动对方法的参数进行序列化,并将序列化后的数据发送给服务器。
服务器在接收到数据后,会进行反序列化,并将参数恢复成原始的Java对象。
同样地,服务器执行完方法后,将返回值序列化并发送给客户端,客户端在接收到返回值后进行反序列化。
RMI的远程调用过程中,序列化和反序列化是必不可少的环节。
通过序列化,RMI可以将Java对象在网络中进行传输,使得远程调用得以实现。
分布式应用技术中的CORBA、JavaRMI和DCOM
第 2 1卷 第 2期 20 0 2年 6月
中南 民族 大 学 学 报 ( 自然 科 学 版 )
J r lo ou h— n r lUnie st o to aI is Na . iEdton) ou na fS t Ce t a v r iy f rNa in i e ( t Sc. ii t
Vo1 21 . No 2 .
J n. 00 u 2 v RM I和 DC A、 a a OM
杨喜敏 陆际光 唐 菀
( 中南 民族 大 学 计 算 机 科 学 学 院 )
摘
要
简 述 了 目前 3种 流 行 的 分 布 式 应 用 技 术 C ORB J v R I D OM 的 基 本 架 构 , 技 术 特 点 、 理 的 方 便 A、a a M 和 C 从 管
1 多 层 分 布 式 对 象 架 构
以传 统 客 户 / 务 器 模 式 为 基 础 , 客 户 程 序 和 服 将
数 据 库服 务 器 的 功能 进 一 步 分 解 , 客 户 程 序 仅 根据 使 需 要 提 出数 据请 求 , 据 库 服 务 器 也 仅 负 责 与 数 据存 数 储 、 整 性 控制 等 有 关 的任 务 , 数 据 组 合 、 解 和转 完 而 分
性 、 全 控 制 和适 宜 的 应 用 环 境 等 方 面 分 析 了 3种 技 术 的 应 用 特 点 . 安
关 键 词 C ORB 技 术 ;a a A Jv RMI技 术 ; OM / OM 技 术 C DC
中图分类号 TP 1 文 献 标 识 码 A 文 章 编 号 1 0 — 0 8 2 0 ) 2 0 6 — 3 31 0 53 1 (0 2 0 — 0 10
什么是RMI?
什么是RMI?
RMI(Remote Method Invocation,远程⽅法调⽤)是⽤Java在JDK1.2中实现的,它⼤⼤增强了Java开发分布式应⽤的能⼒。
Java作为⼀种风靡⼀时的⽹络开发语⾔,其巨⼤的威⼒就体现在它强⼤的开发分布式⽹络应⽤的能⼒上,⽽RMI就是开发百分之百纯Java的⽹络分布式应⽤系统的核⼼解决⽅案之⼀。
其实它可以被看作是RPC的Java版本。
但是传统RPC并不能很好地应⽤于分布式对象系统。
⽽Java RMI 则⽀持存储于不同地址空间的程序级对象之间彼此进⾏通信,实现远程对象之间的⽆缝远程调⽤。
Java RMI(Remote Method Invocation)--Java的远程⽅法调⽤是Java所特有的分布式计算技术,它允许运⾏在⼀个Java虚拟机上的对象调⽤运⾏在另⼀个Java虚拟机上的对象的⽅法,从⽽使Java编程⼈员可以⽅便地在⽹络环境中作分布式计算。
⾯向对象设计要求每个任务由最适合该任务的对象执⾏,RMI将这个概念更深⼊了⼀步,使任务可以在最适合该任务的机器上完成。
RMI定义了⼀组远程接⼝,可以⽤于⽣成远程对象。
客户机可以象调⽤本地对象的⽅法⼀样⽤相同的语法调⽤远程对象。
RMI API提供的类和⽅法可以处理所有访问远程⽅法的基础通信和参数引⽤要求的串⾏化。
使⽤RMI开发步骤:
1、定义⼀个远程接⼝(远程接⼝必须继承接⼝,每个⽅法必须抛出远程异常,⽅法参数和⽅法返回值都必须是可序列
化的)
2、实现远程接⼝
3、定义使⽤远程对象的客户程序
4、产⽣远程访问对象的桩和框
5、注册远程对象
6、运⾏服务器和客户程序。
基于Java的RMI技术的研究与应用
3 2 分布 式应 用 实例 .
下面 通过 一个 实例 给 出了设计 J v a aRM1 布 分 式应用 程 序 的具 体 实现 和运行 过程 。
1 )生成 一个 远程 接 口。
2 2 RMI . 系统 的构成 通 过对 RMI 统 运 行 机 制 分 析 , 以看 到方 系 可 法 调用从 客户 对 象 经 su 、e t eee c a e t b rmoerfrn ely r
{ }
Re o eRe e e c m t f r n e M a a e n g r
用 方式 和对本 地对 象 方 法 的 调用 相 同 。4 )实现 了
RM Tr ns a
La e y r
服务 器 和 客 户 机 的程 序 后 , 可 以编 译 和 运 行 该 就
复 HR M
其 中 Su tb和 s eeo k ltn由 r c编 译 器 生 成 。R mi MI
系统 结构 如 图 1 所示 [ 。 5 ]
分 布 式 应 用
Se ve r r C¨e t n
编写 Jv M1 布式 应用 程序 主要 采用 以下 aaR 分 几 个 步骤实 现 l :1 7 )将 远 程类 的功 能 定 义 为 Jv ] aa
接 口。在 J v a a中 , 程 对 象 是 实 现 远 程 接 口的类 远 的实例 , 远 程 接 口中声 明 每 个 要 远 程 调 用 的方 在
法 。2 )编写 和实 现服务 器 类 。该类 是 实现 1 中定 )
义 的远 程接 口 。因此 在 该 类 中至 少 要 声 明实 现 一
器 ) 。
3 RMI 具体 实 现 与应 用
3 1 Jv . a a RM1 布式应 用 实现 分
rmi利用原理
rmi利用原理
RMI利用原理
RMI(Remote Method Invocation)是一种远程服务调用技术,
它可以让客户端的一个程序调用另一台服务端的 Java 程序,而不必关心跨网络的底层细节,也无需为客户端和服务器之间的数据传输提供特殊的处理。
RMI 可以在不同的计算机系统之间传递 Java 对象,而且不需要客户端和服务器之间的网络层协议。
它使用Java 平台独有的反射机制来实现远程方法调用,由于Java 平台的跨平台特性,客户端和服务器之间的通信可以跨越不同的操作系统和网络协议,使得 RMI 更
加强大。
RMI利用原理的核心是一个叫做 RMI registry 的元数据服务,它可以在服务器端动态生成一个名为 URL 的 Javabean,该Javabean 包含了服务器的 IP 地址和端口号,客户端可以通过该Javabean 来访问服务器端,调用服务器端的方法。
RMI registry 还可以用于服务器端对远程对象的调用,客户端
可以通过注册的远程对象来访问服务器端的方法,实现远程方法调用。
此外,RMI 还可以支持客户端和服务器端之间的消息传输,使得客户端和服务器端之间可以通过消息传输来进行数据传输。
总之,RMI 是一种非常强大的远程服务调用技术,它支持跨越不同的操作系统和网络协议的远程方法调用,可以支持客户端和服务器端之间的消息传输,可以为企业系统的架构提供强大的远程数据访问
能力。
RMI原理及实现
Stub 和 Skeleton 之间通过远程调用层进行相互通讯,远程调用层遵循 TCP/IP 协议收发 数据。下面我们来大致了解一种称为为“绑定”的技术。
?远程客户端:这是一个帮助我们访问远程方法提供帮助的类,它也是最终用户。 我们将使用查找和调用远程方法的方法在该类中调用远程方法。
编程 我们将首先编写远程对象,并将代码保存为名字为 AddServer.Java 的文件: import Java.rmi.*; public interface AddServer extends Remote { public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException; } 我们来看看上面的代码。首先,为了使用其内容,我们导入 rmi 包。然后,我们创
C:\jdk\bin\Javac workingdir\RmiClient.Java 在对我们的代码进行测试前,还必须首先启动 RMI Registry。RMI Registry 存储有 所有绑定的数据,没有它,RMI 就不能正常地运行! 启动 Rmi Registry 服务器: C:\jdk\bin\start rmiregistry 我们会注意到,这时会出现一个空白的 DOS 提示符窗口,这表明 Rmi Registry 服 务器在运行,注意不要关闭该窗口。然后,我们首先在一个 DOS 提示符窗口中运行 Rmi 服 务器,然后在另一个 DOS 提示符窗口中运行 Rmi 客户端。 启动 RMI 服务器:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一个参数是要下载文件的名称,第二个参数是要下载的文件所在主机的地 址,也就是运行文件服务器的那台电脑的地址。
代码范例4: FileClient.java
import java.io.*;
import java.rmi.*;
public class FileClient{
if(System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
try {
FileInterface fi = new FileImpl("FileServer");
try {
File file = new File(fileName);
byte buffer[] = new byte[(int)file.length()];
BufferedInputStream input = new
BufferedInputStream(new FileInputStream(fileName));
input.read(buffer,0,buffer.length);
input.close();
return(buffer);
} catch(Exception e){
System.out.println("FileImpl: "+e.getMessage());
下一步是编译服务器和客户机。用javac编译器来做这件事。但是请注意:如 果服务器和客户机是在两台不同的机器上开发的,为了编译客户机,需要把接口 (FileInterface)复制一份。
最后,启动RMI注册表并运行服务器和客户机。为了在缺省的端口号上启动 RMI注册表,请在Windows中使用命令rmiregistry或 start rmiregistry。为了在其他端口号上启动RMI注册表,可以 提供该端口号作为RMI注册表的一个参数:
output.flush();
output.close();
} catch(Exception e) {
System.err.println("FileServer exception: "+ e.getMessage());
e.printStackTrace();
简要介绍分布式对象系统
简要介绍RMI和CORBA
让你对在RMI和CORBA中开发应用程序所涉及的工作有个初步印象
演示如何使用RMI和CORBA,从远程主机传送文件
对RMI和CORBA进行简单比较
客户机/服务器模型
客户机/服务器模型是分布式计算的一种形式,在这种形式中,一个程序(客 户机)与另一个程序(服务器)通讯以便交换信息。在这种模型中,客户机和服 务器通常都说同样的语言--也就是说客户机和服务器能理解同一个协议--这 样它们才能通讯。
}
}
}
运行应用程序
为了运行应用程序,我们需要生成存根和基干,编译服务器和客户机,启动 RMI注册表,最后是启动服务器和客户机。
为了生成存根和基干,请使用rmic编译器:
prompt> rmic FileImpl
这将生成两个文件:FileImpl_Stub.class和 FileImpl_Skel.class。存根是一个客户机代理,基干是一个服 务器基干。
分布式对象模型
基于分布式对象的系统是一组对象的集合,这些对象以一种明确定义封装的接 口把服务的请求者(客户机)和服务的提供者(服务器)分隔开。换言之,客户 机从服务的实现中分离出来,变成数据的呈现和可执行代码。这就是基于分布式 对象的模型与纯粹的客户机/服务器模型的主要区别之一。
虽然客户机/服务器模型的实现方式多种多样,但典型做法是使用底层套接字。 使用套接字开发客户机/服务器系统意味着,我们必须设计一个协议,也就是客户 机和服务器都认识的一组命令集,通过这些命令它们就能通讯了。举例来说, HTTP协议中提供了一个名为GET的方法,所有Web服务器都必须实现这个方法,所 有Web客户机(浏览器)都必须使用这个方法,才能获取文档。
在基于分布式对象的模型中,客户机向对象发送消息,然后对象解释该消息以 便决定要执行什么服务。这项服务,也就是方法,可以选择是让对象还是让代理 来执行。Java远程方法调用(RMI)和公用对象请求代理体系(CORBA)就是这种 模型的例子。
RMI
RMI是一个分布式对象系统,它使你能够轻松地开发出分布式Java应用程序。 在RMI中开发分布式应用程序比用套接字开发要简单,因为不需要做设计协议这种 很容易出错的工作。在RMI中,开发者会有一种错觉,似乎是从本地类文件调用的 本地方法,其实参数传送给了远程目标,目标解释参数后再把结果发回给调用方。
J2EE中用RMI和CORBA进行分布式Java编程
时间:2009-07-28 15:59:30来源:网络 作者:未知 点击:183次
Java远程方法调用(RMI)机制和公用对象请求代理体系(CORBA)是最重要和使用最广泛的两种分布式对象系统。每个系统都有其特点和短处。它们在行 业中被用于从电子交易到保健医疗的各个领域。一个项目如果要从这两种分布式 机
代码范例1 1: FileInterface.java
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface FileInterface extends Remote {
public byte[] downloadFile(String fileName) throws
}
}
}
语句Naming.rebind("//127.0.0.1/FileServer", fi)假定RMI 注册表在缺省的端口号1099上运行。但是,如果RMI注册表在其他端口号上运行, 就必须在这一句中指定端口号。例如,如果RMI注册表在端口4500上运行,那么 这一句就变成:
e.printStackTrace();
return(null);
}
}
}
开发服务器
第三个步骤是开发服务器。服务器需要做三件事:
创建RMISecurityManager的一个实例并安装它
创建远程对象(在本例中是FileImpl)的一个实例
RMI应用程序初步
使用RMI开发分布式应用程序包括以下步骤:
定义一个远程接口
实现这个远程接口
开发服务器
开发客户机
生成存根和基干,启动RMI注册表、服务器和客户机
下面我们将通过开发一个文件传输程序来实践这些步骤。
范例: 文件传输程序
implements FileInterface {
private String name;
public FileImpl(String s) throws RemoteException{
super();
name = s;
}
public byte[] downloadFile(String fileName){
File file = new File(argv[0]);
BufferedOutputStream output = new
BufferedOutputStream(new FileOutputStream(file.getName()));
output.write(filedata,0,filedata.length);
实现远程接口
下一步是实现接口FileInterface。实现的范例见代码范例2。 请注意,除了实现FileInterface之外,还把FileImpl 类扩展为UnicastRemoteObject。这表示FileImpl类 将用于创建一个单独的、不可复制的远程对象,它使用RMI缺省的基于TCP的传送 通道进行通讯。
}
try {
String name = "//" + argv[1] + "/FileServer";
FileInterface fi = (FileInterface) Naming.lookup(name);
byte[] filedata = fi.downloadFile(argv[0]);
在RMI注册表中登记这个创建的对象。实现的范例见代码范例3。
代码范例 3: FileServer.java
import java.io.*;
import java.rmi.*;
public class FileServer {
public static void main(String argv[]) {
Naming.rebind("//127.0.0.1:4500/FileServer", fi)
另外,在这里要着重指出,我们假定rmi注册表和服务器是在同一台电脑上运 行。如果不是这样,只需修改rebind方法中的地址即可。
开发客户机
下一步是开发客户机。客户机可以远程调用远程接口 (FileInterface)中指定的任何方法。但是为了能这么做,客户 机首先必须从RMI注册表中获得指向该远程对象的引用。获得引用之后就可以调 用downloadFile方法了。客户机的实现请见代码范例4。在这个实 现中,客户机从命令行接收两个参数:
这个应用程序允许客户机从远程主机上传送(即下载)任何类型的文件(纯 文本或二进制文件)。第一步是定义一个远程接口,这个接口规定了服务器所提 供方法的信号,客户机将调用这些方法。