六步教你学会简单rmi

合集下载

JAVA_RMI使用快速入门

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是远程方法调用的简称,象其名称暗示的那样,它能够帮助我们查找并执行远程对象的方法。

通俗地说,远程调用就象将一个class放在A机器上,然后在B机器中调用这个class的方法。

我个人认为,尽管RMI不是唯一的企业级远程对象访问方案,但它却是最容易实现的。

与能够使不同编程语言开发的CORBA不同的是,RMI是一种纯Java 解决方案。

在RMI中,程序的所有部分都由Java编写。

在看本篇文章时,我假定读者都已经具备了较扎实的Java基础知识,在这方面有欠缺的读者请自行阅读有关资料。

概念我在前面已经提到,RMI是一种远程方法调用机制,其过程对于最终用户是透明的:在进行现场演示时,如果我不说它使用了RNI,其他人不可能知道调用的方法存储在其他机器上。

当然了,二台机器上必须都安装有Java虚拟机(JVM)。

其他机器需要调用的对象必须被导出到远程注册服务器,这样才能被其他机器调用。

因此,如果机器A要调用机器B上的方法,则机器B必须将该对象导出到其远程注册服务器。

注册服务器是服务器上运行的一种服务,它帮助客户端远程地查找和访问服务器上的对象。

一个对象只有导出来后,然后才能实现RMI 包中的远程接口。

例如,如果想使机器A中的Xyz对象能够被远程调用,它就必须实现远程接口。

RMI需要使用占位程序和框架,占位程序在客户端,框架在服务器端。

在调用远程方法时,我们无需直接面对存储有该方法的机器。

在进行数据通讯前,还必须做一些准备工作。

占位程序就象客户端机器上的一个本机对象,它就象服务器上的对象的代理,向客户端提供能够被服务器调用的方法。

然后,Stub就会向服务器端的Skeleton发送方法调用,Skeleton就会在服务器端执行接收到的方法。

Stub和Skeleton之间通过远程调用层进行相互通讯,远程调用层遵循TCP/IP协议收发数据。

下面我们来大致了解一种称为为“绑定”的技术。

客户端无论何时要调用服务器端的对象,你可曾想过他是如何告诉服务器他想创建什么样的对象吗?这正是“绑定”的的用武之地。

RMI,远程方法调用(Remote Method Invocation)

RMI,远程方法调用(Remote Method Invocation)

RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。

RMI是非常容易使用的,但是它非常的强大。

RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。

下面我们通过具体的例子,建立一个简单的远程计算服务和使用它的客户程序一个正常工作的RMI系统由下面几个部分组成:●远程服务的接口定义●远程服务接口的具体实现●桩(Stub)和框架(Skeleton)文件●一个运行远程服务的服务器●一个RMI命名服务,它允许客户端去发现这个远程服务●类文件的提供者(一个HTTP或者FTP服务器)●一个需要这个远程服务的客户端程序下面我们一步一步建立一个简单的RMI系统。

首先在你的机器里建立一个新的文件夹,以便放置我们创建的文件,为了简单起见,我们只使用一个文件夹存放客户端和服务端代码,并且在同一个目录下运行服务端和客户端。

如果所有的RMI文件都已经设计好了,那么你需要下面的几个步骤去生成你的系统:1、编写并且编译接口的Java代码2、编写并且编译接口实现的Java代码3、从接口实现类中生成桩(Stub)和框架(Skeleton)类文件4、编写远程服务的主运行程序5、编写RMI的客户端程序6、安装并且运行RMI系统1、接口第一步就是建立和编译服务接口的Java代码。

这个接口定义了所有的提供远程服务的功能,下面是源程序://Calculator.java//define the interfaceimport java.rmi.Remote;public interface Calculator extends Remote{public long add(long a, long b)throws java.rmi.RemoteException;public long sub(long a, long b)throws java.rmi.RemoteException;public long mul(long a, long b)throws java.rmi.RemoteException;public long div(long a, long b)throws java.rmi.RemoteException;}注意,这个接口继承自Remote,每一个定义的方法都必须抛出一个RemoteException异常对象。

rmi入门教程,简单明了(转)

rmi入门教程,简单明了(转)

rmi入门教程,简单明了(转)2007-02-02JAVA RMI 实例博客分类:•JAVA技术JAVA RMI 快速入门实例本实例为参考多篇文章写就而成,网上及书上各类文章介绍如何使用RMI有多种实例可参考,譬如有:1. 用命令rmiregistry启动RMI注册服务的2. 同时创建存根(stub)和骨架(skeleton)的3. 只创建存根类的的(jdk1.2以后版本)4. 通过RemoteRef和rmi://协议字串方式的5. 比较少讲到的用LocateRegistry直接在代码上启动RMI注册服务的。

以上描述并非明显分类,比如,你总是可以选择用rmiregistry或者代码LocateRegistry启动RMI注册服务下面我将介绍一个完整的实例,让初学者能快速体验RMI的功用。

分为以下四个步骤1. 创建远程接口及声明远程方法(HelloInterface.java)2. 实现远程接口及远程方法(继承UnicastRemoteObject)(Hello.java)3. 启动RMI注册服务,并注册远程对象(HelloServer.java)4. 客户端查找远程对象,并调用远程方法(HelloClient)5. 执行程序:启动服务HelloServer;运行客户端HelloClient进行调用具体代码及对应步骤如下:代码如何编译这里就不细讲(1)打开一个Dos窗口执行命令 java com.unmi.HelloServer 启动服务HelloServerE:workspaceTestRMIbin>java com.unmi.HelloServerHello Server is ready.运行成功则可以看到 Hello Server is ready(2)打开另一个Dos窗口执行命令 java com.unmi.HelloClient 运行客户端程序E:workspaceTestRMIbin>java com.unmi.HelloClientHello, world!调用成功则可以看到Hello, world!并且在启动服务端的窗口中看到紧跟 Hello Server is ready. 打印出Called by HelloClient如果您能一路顺畅的执行到这里,恭喜!您已度过了一个轻快的RMI之旅。

电成像XRMI操作手册

电成像XRMI操作手册

第一章概述 (3)1。

适用岗位及要求 (3)2。

相关HSE要求 (3)3。

主要技术参数 (3)第二章现场测井工作流程 (6)2.1 现场施工步骤 (6)2.2测井仪器连接 (7)2。

3地面系统连线及开关设置 (7)2.3.1 DIMP面板开关设置 (7)2。

3。

2 TPS电源面板开关设置 (8)2。

3.3 ELGAR万能电源面板开关设置 (10)2。

3.4 DIMP和TPS、SDDP连线 (12)2。

3.5 SDDP独立深度面板和5700 I/O板连线 (13)2。

3。

6 SDDP独立深度面板开关及背板接头 (13)2.3.7 SDDP独立深度面板参数设置 (14)2。

4 测井软件操作 (17)2。

4。

1笔记本和地面系统通讯检查 (17)2。

4.2 CLASS测井软件操作 (18)2。

4.3仪器工作状态检查 (25)2.4.4极板和井径刻度 (30)2。

4。

5 井下张力主刻度 (32)2.4.6XRMI内置导航包刻度 (33)2.4。

7井口吊零检查 (34)2。

4。

8下井测量 (35)2。

4.9测井时曲线滚动显示窗口及边界比例设置 (39)第三章探头机械部分下井前检查 (46)第四章测后处理常用软件介绍 (48)4。

1Editor数据编辑 (48)点击应用桌面上的DESKTOP图标,进入下图界面 (48)4。

2CLS Merge曲线拼接 (51)4。

3 MathPack曲线编辑 (53)4。

3.1 数值加减乘除运算处理 (53)4。

3.2 曲线滤波处理 (55)4。

4 Geoload文件格式转换 (57)第五章井常见故障处理 (60)5。

1 地面系统与仪器通讯连接错误 (60)5.2 地面系统W2无输出电压 (62)5。

3 供电或发射后极板无信号 (63)5。

3。

1 从探头上拆卸安装极板操作: (63)5.3。

2 安装极板过程与拆卸极板是相反的流程 (69)5.4更换极板连接线 (70)5.5 发出发射指令后极板无发射电压或回路电压EMEXR较低 (75)5。

6第六讲 RMI技术

6第六讲 RMI技术

第六讲 RMI技术主要内容* RMI的概述* RMI的应用开发步骤* 命名服务* 远程方法调用的不同形式RMI概述* 为什么要使用RMI(Remote Method Invocation, RMI)?* RMI的基本工作原理;* Stub的自动生成.为什么要使用RMI?* RMI允许不同的Java虚拟机之间进行对象间的通信,从而共享各个虚拟机上的资源和处理能力。

* RMI的目的是使分布在不同的虚拟机中的对象工作起来像是本地对象,以达到位置透明性,应用程序不用知道对象是本地还是远程的,屏蔽应用程序对底层的复杂实现细节。

RMI的基本工作原理1.调用者用通常方式调用对应Java的一个远程对象的方法;2.这个顾客Stub的功能把有关的参数组装成一个消息包或一组消息包。

运行此方法的那个站点的“地址”和那个站点上对象及方法的“标识符”、调用方法的参数,都应包含在这条消息中;3.将这消息发送给对应的RMI runtime系统,该子程序再转至指定的站点;4.在接收此消息时,远程RMI runtime系统引用与被调用者对应的服务者Stub,并让它来处理这条消息;5.服务者Stub,反序列化有关的参数,并用本地方法调用方式调用所需的方法。

然后把调用结果序列化,向调用者返回调用结果;6.调用者方RMI runtime系统接收返回调用结果。

调用者Stub反序列化参数,然后,返回调用结果到调用方法。

* 与用户对应的Stub如何知道实际运行远程过程的结点的地址呢?(通过命名服务).* 传输部分的功能:(1)提供RMI协议的选择;(2)建立/释放逻辑信道,发送/接收消息等;(3)管理RMI中的消息缓冲区。

* 控制部分的主要功能是: (1)确定RMI中消息的方向(发送或接收)。

当顾客Stub开始RMI调用或者服务者Stub返回调用结果时,该部分负责控制传输部分进行传输。

 (2)结点间会合与进程同步。

结点间会合是指为使两个结点间进程同步,即早到达的进程要等待晚到达的进程,会话进程通过结点间会合建立一致的起点,并以该起点作为进程同步点进行对话。

JAVA_RMI使用快速入门

JAVA_RMI使用快速入门
2. 编写接口以及实现类 public interface ICalculator { public long add(long a, long b); public long sub(long a, long b); public long mul(long a, long b); public long div(long a, long b); }//参数必须是可序列化的参数实现 java.io.Serializable public class CalculatorImp implements ICalculator {}
一.RMI 原理及介绍 1.基本介绍 RMI 目前使用 Java 远程消息交 换协议 JRMP(Java Remote Messaging Protocol)进行通信。 JRMP 是专为 Java 的远程对象制定的协议。因此,Java RMI 具有 Java 的“Write Once,Run Anywhere”的优点,是分布式应用系统的百分之百纯 Java 解决方案。用 Java RMI 开发的应 用系统可以部署在任何支持 JRE(Java Run Environment Java,运行环境)的平台上。但由 于 JRMP 是专为 Java 对象制定的,因此,RMI 对于用非 Java 语言开发的应用系统的支持不 足。不能与用非 Java 语言书写的对象进行通信。
Java Remote Method Invocation ( RMI -- Java 远程方法调用)允许您使用 Java 编写分布式对 象。本文将介绍 RMI 的优点以及如何将其连接到现有的和原有的系பைடு நூலகம்中,以及与用 Java 编 写的组件的连接。
RMI 为采用 Java 对象的分布式计算提供了简单而直接的途径。这些对象可以是新的 Java 对 象,也可以是围绕现有 API 的简单的 Java 包装程序。Java 体现了“编写一次就能在任何地方 运行的模式。而 RMI 可将 Java 模式进行扩展,使之可在任何地方运行”。因为 RMI 是以 Java 为核心的,所以,它将 Java 的安全性和可移植性等强大功能带给了分布式计算。务逻辑等 属性移动到网络中最合适的地方。如果您要扩展 Java 在系统中的使用,RMI 将使您充分利 用其强大功能。

EJB教程第一章

EJB教程第一章

RMI概述
2、RMI的目的 RMI的根本目的就是给应用程序开发者提供一个调用 远程对象方法的抽象功能,而不必采用低级通信。这样用 java开发的分布式应用程序可以完全是面向对象的,可以 使用面向对象的开发方法进行设计。 RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。JRMP是专 为Java的远程对象制定的协议。因此,Java RMI具有 Java的“Write Once,Run Anywhere”的优点,是分布 式应用系统的百分之百纯Java解决方案。用Java RMI开 发的应用系统可以部署在任何支持JRE(Java Run Environment Java,运行环境)的平台上。
Java RMI的接口和类
3) RemoteObject类 该类实现了Remote接口,为远程对象实现提供了基本 模板,它重载了Object类的几个方法,使他们具有远程的 意识。 4)RemoteServer类 该类继承了RemoteObject类并提供了其它功能,它也 是大多数RMI服务器所继承的UnicastRemoteObject类的 父类。需要特别指出的是,创建和导出远程对象所需的功 能理论上由 RemoteServer 提供,具体由其子类提供。 5)RMISocketFactory抽象类 该类同时实现RMIClientSocketFactory和 RMIServerSocketFactory接口,其实例由 RMI 运行时使 用,以便获得 RMI 调用所需的客户机和服务器套接字。
Java RMI的接口和类
2)LocateRegistry类 LocateRegistry 用于获得对特定主机(包括本地主机) 上引导远程对象注册表的引用,或用于创建一个接受对特定 端口调用的远程对象注册表。 该类定义了几个方法,均返回Registry实例 public static Registry createRegistry(int port) – 创建并导出接受指定 端口请求的本地主机上的 Registry 实例。 public static Registry getRegistry() - 返回本地主机在默认注册表端口 1099 上对远程对象 Registry 的引用。 public static Registry getRegistry(int port) - 返回本地主机在指定 端口上对远程对象 Registry 的引用。

RMI规范

RMI规范

能。类似地,RMI 可利用 JDBC 、在不修改使用数据库的现有非 Java 源代码的前提下与现有 关 系数据库进行交互。 分布式垃圾收集: RMI 采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象。与 Jav a 虚拟机内部的垃圾收集类似,分布式垃圾收集功能允许用户根据自己的需要定义服务器对象, 并且明确这些对象在不再被客户机引用时会被删除。 并行计算: RMI 采用多线程处理方法,可使您的服务器利用这些 Java 线程更好地并行处理客户端的请求。 Java 分布式计算解决方案: RMI 从 JDK 1.1 开始就是 Java 平台的核心部分,因此,它存在 于任何一台 1.1 Java 虚拟机中。所有 RMI 系统均采用相同的公开协议,所以,所有 Java 系统 均可直接相互对话,而不必事先对协议进行转换。 1.3 简单介绍 CORBA 和 DCOM 1.3.1 COBRA: CORBA 是 OMG(Ob ject Management Group) 提出的一个分布式对象技术的规范。 COBR A 标准主要分为 3 个层次:对象请求代理、公共对象服务和公共设施。最底层是对象请求代理 OR B,规定了分布对象的定义(接口)和语言映射,实现对象间的通讯和互操作,是分布对象系 统 中的 “软总线 ”;在 ORB 之上定义了很多公共服务,可以提供诸如并发服务、名字服务、事务 (交 易)服务、安全服务等各种各样的服务;最上层的公共设施则定义了组件框架,提供可直接为业 务对象使用的服务,规定业务对象有效协作所需的协定规则。总之 ,CORBA 的特点是大而全, 互操作性和开放性非常好。目前 CORBA 的最新版本是 2.3 。 CORBA 3.0 也已基本完成,增 加了有关 Internet 集成和 QoS 控制等内容。 CORBA 的缺点是庞大而复杂,并且技术和标准 的更新相对较慢 . 1.3.2 DCOM DCOM 是 Microsoft 与其他业界厂商合作提出的一种分布构件对象模型(Distributed Comp o nent Object Model ).DCOM 起源于动态数据交换( DDE )技术 ,对象连接与嵌入 OLE 就是从 DDE 引伸而来的。随后, Microsoft 引入了构件对象模型 COM ,形成了 COM 对象之间实现 互 操作的二进制标准。基于 COM ,微软进一步将 OLE 技术发展到 OLE2 。在 OLE2 中,出现了我 们今天熟知的拖 -放技术以及 OLE 自动化。 DCOM 是 COM 在分布计算方面的自然延续,它 为 分布在网络不同节点的两个 COM 构件提供了互操作的基础结构。 当然,按照微软一贯的产品开发逻辑,微妙的思想都退到了幕后,而提供给开发者的是一个以 Wizard 方式生成各种应用的可视化开发环境

简洁健身法

简洁健身法

健身减脂【PS】简单练习可以只练带下划线的repetition maximum(rm)表示的是相对重量,8rm是指你最多能够连续完成8次的重量,或者说,你能够连续完成8次的最大重量。

前提是动作标准,不要借力作弊。

一般来说,增长最大力量用1-5rm的重量来练习,增肌用6-12rm的重量,减脂用15-20rm的重量(设为WT),每组至力竭。

(但是对于新学员,我们都是说8-12rm,每组10次),男生一般选择6-12rm,女生选择15-20rm。

具体动作以及图解见表一。

表一大肌肉群细分肌肉图动作图比较轻松的动作简易替代(哑铃与平板)编号肱三头肌俯卧撑或者跪膝俯卧撑平板 1肱二头肌拉力器曲臂弯曲坐姿哑铃臂弯举或者直板哑铃托臂弯举2胸腔背部背阔肌附身双臂上拉(拉力器)单手哑铃划船3斜方肌双臂侧拉(拉力器)哑铃绕肩4冈下肌站立手臂旋拉(拉力器)俯身哑铃摆臂(以大臂为轴)5小腿腓肠肌和比目鱼肌哑铃坐姿提踵6肩前束哑铃前平举7部肩中束哑铃直拉8肩后束俯身哑铃摆臂9胸肌胸大肌拉力器飞鸟等宽距俯卧撑10上胸肌上斜俯卧撑11前臂哑铃腕弯举可以不单练12腹背部腹直肌剪刀式仰卧起坐(俗称两头起)仰卧起坐13腹斜肌侧仰卧起坐14竖脊肌哑铃直腿硬拉15大腿以及臀部股四头肌哑铃弓步蹲16大腿后侧和臀大肌后抬腿 17常用复合动作:1、plank (平板支撑)2、引体向上(手心向里和向外两种)3、深蹲蛙跳4、俯卧撑5、卧推健身自我实施表每次如果专门练习,每组12-15个,不少于3组。

专业练习者建议3天一轮,每天不多于6个动作。

RMI资料详解

RMI资料详解

二,RMI系统运行机制
客户端的JVM 客户端的 应用程序 Stub Method1() () Method2() () 数据流
服务器端的JVM 服务器端的 Remote Method1() () Method2() ()
返回值 参数
Skeleton Method1() () Method2() ()
一,RMI概述 概述
2,RMI的目的 , 的目的 RMI的根本目的就是给应用程序开发者提供一个调用 的根本目的就是给应用程序开发者提供一个调用 远程对象方法的抽象功能,而不必采用低级通信. 远程对象方法的抽象功能,而不必采用低级通信.这样用 java开发的分布式应用程序可以完全是面向对象的,可以 开发的分布式应用程序可以完全是面向对象的, 开发的分布式应用程序可以完全是面向对象的 使用面向对象的开发方法进行设计. 使用面向对象的开发方法进行设计. RMI目前使用 目前使用Java远程消息交换协议 远程消息交换协议JRMP(Java 目前使用 远程消息交换协议 ( Remote Messaging Protocol)进行通信.JRMP是专 )进行通信. 是专 的远程对象制定的协议. 为Java的远程对象制定的协议.因此,Java RMI具有 的远程对象制定的协议 因此, 具有 Java的"Write Once,Run Anywhere"的优点,是分布 的 , 的优点, 的优点 式应用系统的百分之百纯Java解决方案.用Java RMI开 解决方案. 式应用系统的百分之百纯 解决方案 开 发的应用系统可以部署在任何支持JRE(Java Run 发的应用系统可以部署在任何支持 ( Environment Java,运行环境)的平台上. ,运行环境)的平台上.
二,RMI系统运行机制

JAVARMI和JNDI简单学习

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系统原理及使用方法

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 的运行逻
RMI(远程方法调用)是一种在分布式系统中进行远程通信的技术,其运行逻辑如下:
客户端调用远程对象方法:客户端通过本地接口调用远程对象的方法,就像调用本地对象一样。

1.Stub 封装调用参数:本地接口的实现对象,也就是Stub,会将客户端调用方法的参数进行封装,以便进行传输。

2.远程传输:Stub 将封装好的参数通过网络传输给远程对象,即服务器端的Skeleton。

3.Skeleton 解封装参数:Skeleton 接收到远程传输的参数后,将其解封装,并调用实际的远程对象方法进行处理。

4.远程方法调用:远程对象执行客户端请求的方法,返回结果。

5.Skeleton 返回结果:Skeleton 将远程对象执行方法的结果封装,通过网络传输回客户端。

6.Stub 接收结果:Stub 接收到远程传输的结果后,将其解封装,返回给客户端。

RMI 的运行逻辑可以简单地概括为客户端通过本地接口调用远程对象方法,而Stub 和Skeleton 则负责将调用参数和结果进行封装和解封装,并进行网络传输。

这种运行逻辑使得远程方法调用看起来像是本地方法调用一样简单,同时也可以在分布式系统中实现不同节点之间的通信,方便地进行远程操作和数据传输。

JavaRMI入门实战

JavaRMI入门实战

它表面上与其他的接口类似,只是对 Remote 进行了扩展,而且所有的方法都会“掷”出 RemoteException.接口和方法都是 Public 的。 编译 PerfectTimeI.java,生成 PerfectTimeI.class(test 是包,编译时注意路径) G:\RMI>javac test\PerfectTimeI.java 二、远程接口的实施: 服务器必须包含一个扩展了 UnicastRemoteObject 类,并实现远程接口。这个类也可以 含有附加的方法,但客户只能使用远程接口中的方法。因为客户是指向接口的一个句柄,而 不是它的哪个类。 必须为远程对象定义构件器, 即使只准备定义一个默认构件器, 用它调用基础类构件器。 必须把它明确地编写出来,因为它必须“掷”出 RemoteException 违例。 下面列出远程接口 PerfectTime 的事实过程:他代表精确计时服务 //PerfectTime.java //The implementation of the PerfectTime remote object package test; import .*; import java.rmi.*; import java.rmi.registry.*; import java.rmi.server.*; public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI { //默认构件器,也要“掷”出 RemoteException 违例。 public PerfectTime() throws RemoteException { super(); } public long getPerfectTime() throws RemoteException { return System.currentTimeMillis(); } public static void main(String[] args) { /*创建和安装一个安全管理器,令其支持 RMI.作为 Java 开发包的一部分,适用于 RMI 唯一 一个是 RMISecurityManager.*/ System.setSecurityManager(new RMISecurityManager()); try { /*创建远程对象的一个或多个实例,下面是 PerfectTime 对象*/ PerfectTime pt = new PerfectTime(); /*向 RMI 远程对象注册表注册至少一个远程对象。一个远程对象拥有的方法即可生成指 向其他远程对象的句柄,这样,客户到注册表里访问一次,得到第一个远程对象即可.*/ Naming.bind("PerfectTime", pt); System.out.println("Ready to do Time"); } catch (Exception e) { e.printStackTra行其他机器上的代码,传统的方法不仅难以学习,而且易出错。解决这个 问题的最佳方法是:某些对象正好位于另一台机器,我们可以发送一条消息,并获得返回结 果,就像位于自己的本机器一样。Java 远程方法调用(RMI)特性使客户机上运行的程序可以 调用远程服务器上的对象。 远程方法调用特性使 Java 编程人员能够在网络环境中分布操作。 下面介绍一下必要的步骤,创建自己的 RMI 对象。 一、远程接口概念: RMI 对接口有着强烈的依赖。在需要创建一个远程对象的时候,我们通过传递一个接 口来隐藏基层的实施细节。所以客户得到远程对象的一个句柄正好同一些本地的根代码连 接,有后者负责通过网络通信。但我们并不关心这些事情,通过自己的接口句柄发送消息即 可。 创建一个远程接口时,必须遵守下列规则: 1) 远程接口必须为 public 属性(不能有“包访问” ;也就是说,他不能是“友好的”)。否则, 一旦客户试图装载一个实现了远程接口的远程对象,就会得到一个错误。 2) 远程接口必须扩展接口 java.rmi.Remote。 3) 除与应用程序本身有关的违例,远程接口中的每个方法都必须在自己的 throws 从句中 声明 java.rmi.RemoteException. 4) 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为 远程接口,不可声明为实施类。 下面是一个远程接口示例, //PerfectTimeI.java //The PerfectTime remote interface package test; import java.rmi.*; public interface PerfectTimeI extends Remote { long getPerfectTime() throws RemoteException; }

RMI实例详解

RMI实例详解

RMI实例详解1.功能需求:实现最简单的远程文件访问。

Client能够获取在Server上的远程文件信息。

实例代码中,客户端获取了服务器端的文件“D:\\test\testDate.java”的内容和文件名。

2.实现结构:a)Server包含:i.FileInformation.java 描述文件信息的接口,作为远程访问方法的返回值类型ii.FileInformationImple.java 描述文件信息的接口实现iii.Hello.java 提供的远程访问方法的接口iv.HelloImple.java 远程访问方法的接口实现v.Server.java 服务器开启程序b)Client 包含:i.FileInformation.java描述文件信息的接口(与上同)ii.Hello.java提供的远程访问方法的接口(与上同)iii.Test.java 客户端的运行程序3.服务器端实现的具体步骤:a)设计远程接口涉及的参数类型接口b)设计远程接口c)实现参数类型接口d)实现远程接口e)编写服务器启动程序4.编写客户端测试用例5. 执行程序:可以在eclipse 中直接执行,但是必须先运行服务器,再运行客户端。

也可以在命令行下运行。

次序要求同在eclipse 中。

步骤如下:(1) 打开一个Dos 窗口,执行命令java rmi.Server 启动服务器。

启动成功会在命令行显示“Server start!”(2) 打开另一个Dos 窗口,执行命令java rmi.Test 运行客户端程序。

运行成功则会在屏幕打印“D:\\test\testDate.java ”的文件内容。

6. 注意事项(1) 本实例中并没有用到JDK所带的命令 rmic编译实现类得到存根(Stub)类,也没用命令 rmiregistry 命令来启动RMI 注册服务。

在启动 rmiregistry 之前必须能让它加载到相应的stub 类,这就是造成**_Stub 类找不到的原因。

java_RMI技术讲解

java_RMI技术讲解

RMI技术讲解1、什么是RMI?我们知道远程过程调用(Remote Procedure Call, RPC)可以用于一个进程调用另一个进程(很可能在另一个远程主机上)中的过程,从而提供了过程的分布能力。

Java 的RMI 则在RPC 的基础上向前又迈进了一步,即提供分布式对象间的通讯。

RMI(Remote Method Invocation)为远程方法调用,是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。

这两个虚拟机可以是运行在相同计算机上的不同进程中,也可以是运行在网络上的不同计算机中。

2、RMI的用途?RMI的用途是为分布式Java应用程序之间的远程通信提供服务,提供分布式服务。

目前主要应用时封装在各个J2EE项目框架中,例如Spring,EJB(Spring和EJB均封装了RMI技术)在Spring中实现RMI(具体代码见最后一页)①在服务器端定义服务的接口,定义特定的类实现这些接口;②在服务器端使用org.springframework.remoting.rmi.RmiServiceExporter类来注册服务;③在客户端使用org.springframework.remoting.rmi.RmiProxyFactoryBean来实现远程服务的代理功能;④在客户端定义访问与服务器端服务接口相同的类3、RMI的局限?RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。

JRMP是专为Java的远程对象制定的协议,由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。

不能与用非Java语言书写的对象进行通信(意思是只支持客户端和服务器端都是Java程序的代码的远程调用)。

4、RMI的使用局限?由于客户机和服务器都是使用Java编写的,二者平台兼容性的要求仅仅是双方都运行在版本兼容的Java虚拟机上。

RML_code-入门(1)

RML_code-入门(1)

RML_code-⼊门(1)1 获得数据集(get the dataset)数据集包括两部分,独⽴变量(independent variable)和依赖变量(dependent variable。

机器学习的⽬的就是需要通过独⽴变量来预测⾮独⽴变量(prediction)。

2 导⼊数据集(importing dataset)先设置working directory, 将代码与数据保存在working directory⽂件夹下# 设置working directorygetwd()setwd("C:\\Users\\M*****\\Documents\\ML\\day1\\")# Importing the datasetdataset <- read.csv("Data.csv",header=T,stringsAsFactor=FALSE)View(dataset)Age和Salary是独⽴变量,通过这两个独⽴变量预测是否会Purchase(⾮独⽴变量)。

3 处理空数据(Handling the missing data)在数据集中可能会出现为空的数据,我们不能删除有空数据的列,这会对我们机器学习的结果造成影响,NA有很多处理⽅法(后续分享),此处⽤mean来代替空值。

# Taking care of missing datadataset$Age = ifelse(is.na(dataset$Age),mean(dataset$Age, na.rm = TRUE),dataset$Age) dataset$Salary = ifelse(is.na(dataset$Salary),ave(dataset$Salary, FUN = function(x) mean(x, na.rm = TRUE)),dataset$Salary)Country Age Salary Purchased1 France 44.00000 72000.00 No2 Spain 27.00000 48000.00 Yes3 Germany 30.00000 54000.00 No4 Spain 38.00000 61000.00 No5 Germany 40.00000 63777.78 Yes6 France 35.00000 58000.00 Yes7 Spain 38.77778 52000.00 No8 France 48.00000 79000.00 Yes9 Germany 50.00000 83000.00 No10 France 37.00000 67000.00 Yes4 分类数据(Encoding categorical data)对于数据集中的同类别的数据(如country列)为⾮numerical的数据,可以⽤数字1,2,3区分不同国家,但是会出现问题。

RMI调用机制

RMI调用机制

RMI远程方法调用讲解教程1、RMI概述RMI(Remote Method Invocation)RMI是分布式对象软件包,它简化了在多台计算机上的java应用之间的通信。

必须在jdk1.1以上RMI用到的类java.rmi.Remote所有可以被远程调用的对象都必须实现该接口java.rmi.server.UnicastRemoteObject所有可以被远程调用的对象都必须扩展该类什么是RMI远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。

优点这种机制给分布计算的系统设计、编程都带来了极大的方便。

只要按照RMI规则设计程序,可以不必再过问在RMI之下的网络细节了,如:TCP和Socket 等等。

任意两台计算机之间的通讯完全由RMI负责。

调用远程计算机上的对象就像本地对象一样方便。

1、面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。

也就是说,可以将类似Java哈西表这样的复杂类型作为一个参数进行传递。

2、可移动属性:RMI可将属性从客户机移动到服务器,或者从服务器移动到客户机。

3、设计方式:对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能,如二层和三层结构系统。

假如用户能够传递属性,那么就可以在自己的解决方案中使用面向对象的设计方式。

所有面向对象的设计方式无不依靠不同的属性来发挥功能,假如不能传递完整的对象——包括实现和类型——就会失去设计方式上所提供的优点。

4、安全性:RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全。

RMI使用专门为保护系统免遭恶意小程序侵害而设计的安全治理程序。

5、便于编写和使用RMI使得Java远程服务程序和访问这些服务程序的Java客户程序的编写工作变得轻松、简单。

RMI 实现加法服务器

RMI 实现加法服务器

试验七:RMI实现加法服务器为了完成这个实验,我们需要了解RMI的结构RMI应用程序通常包括两个独立的程序:服务器程序和客户程序:1.典型的服务器应用程序可以创建多个远程对象,并使这些远程对象能够被引用,然后等待客户调用这些远程对象上的方法。

2.典型的客户程序则从服务器中得到一个或多个远程对象的引用,然后调用远程对象的方法。

3.一般来说,实现一个RMI应用程序需要完成以下几个步骤:(1)定义一个接口实现远程接口(2)定义一个类实现远程接口,同时实现服务器端程序,为元亨方法调用提供服务(3)完成客户端程序,在该程序中实现远程方法调用(4)调用rmic命令生成根程序和程序框架(5)在服务器上运行RMI注册程序rmiregistry(6)分别执行服务器程序和客户程序4.下面将按照以上步骤实现我们的加法服务器远程接口:定义求和方法sum(int x,int y),这个方法将在实现它的类中被实现。

实现远程接口的类:服务器端程序:该程序首先调用实现远程接口的Impl类的构造方法建立一个远程对象,一旦生成这个对象,让一个URL格式的名字与该远程对象的引用绑定在一起,就意味着可以接受用远程调用了。

当在服务器端的屏幕上输出“I am ready”时,服务器端的程序就完成了。

客户端代码:这个程序首先从rmiregistry获得远程对象实现的一个引用localobj,然后通过它调用远程对象的sun(int x,int y)方法,并将结果打印在客户端的屏幕上。

如果上述的四个文件没有语法错误且编译成功,则应该在当前目录下生成文件名与着4个.java文件相对应的.class文件。

接下来调用rmic命令生成相应的用于客户端的Stub类和用于服务器端的Skel 类,可在当前目录下运行下面的代码:Rmic Impl命令正常执行后,在当前目录下运行 rmiregistry截图如下:最后进行最后一步,运行服务器端和客户端程序,结果如下:服务器端:客户端:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

六步教你学会简单RMI(上)江苏无锡缪小东(以下所有java文件、.class文件和policy.txt文件都在c盘根目录哦!101.txt在c盘的子目录11下哦!一定要放对!!!)一、 定义远程接口远程接口就是远程机器上可供客户使用的方法的集合。

很幸运它用java语言的接口表示!我们定义这样一个接口只有一个下载远程机器上的指定名称的文件。

//FileServerInterface.javaimport java.rmi.Remote;import java.rmi.RemoteException;public interface FileServerInterface extends Remote {public byte[] download(String Filename)throws RemoteException ;}二、实现远程接口实现上面远程接口的方法,同时继承UnicastRemoteObject类!//FileServerImpl.javaimport java.io.*;import java.rmi.*;import java.rmi.server.UnicastRemoteObject ;public class FileServerImpl extends UnicastRemoteObject implements FileServerInterface{ private static final String initDir = "c://11//";public FileServerImpl( ) throws RemoteException{super();}public byte[] download(String filename){try{File(initDirfilename);+new=Filefilenewbyte[(int)file.length()];=byte[]bufferBufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));bis.read(buffer,0,buffer.length);bis.close();return buffer ;}catch(Exception){eSystem.out.println("FileServerImpl: " + e.getMessage());e.printStackTrace();return null ;}}}三、编写服务器端1.创建并安装一个RMISecurityManager实例;2.创建一个远程对象的实例;3.使用RMI注册工具注册该远程实例对象。

//FileServer.javaimport java.io.*;import java.rmi.*;public class FileServer {public static void main(String[] args){){if(System.getSecurityManager()==nullSystem.setSecurityManager(new RMISecurityManager());}try{FileServerImpl fi = new FileServerImpl("FileServer");java.rmi.Naming.rebind("//127.0.0.1/FileServer",fi);e){}catch(Exceptione.getMessage());+System.out.println("FileServer: "e.printStackTrace();}}}四、编写客户端//FileClient.javaimport java.io.*;import java.rmi.*;public class FileClient {public static void main(String[] args){){2if(args.length!=System.out.println("Usage: java FileClient Filename machinename"); System.exit(0);}try{"//"+args[1]+"/FileServer";=nameStringFileServerInterface(FileServerInterface)Naming.lookup(name);=fifi.download(args[0]);=byte[]filedataFile(args[0]);newfile=FileBufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getName()));bos.write(filedata,0,filedata.length);bos.flush();bos.close();e){}catch(Exceptione.getMessage());+System.out.println("FileClent: "e.printStackTrace();}}}五、创建一个policy文件//policy.txtgrant{permission java.security.AllPermission "" , "" ;};六、运行程序1. javac *.java这个都会吧!要么你就一个一个编译好了!2. rmic FileServerImpl注意哦,不是FileServerImpl.class哦!看看下面的错误:当成你要使用rmic命令编译一个FileServerImpl的内部类class哦!($代表什么,请阅读《Think in java》)3. rmiregistry 或start rmiregistry使用rmiregistry的命令窗口,启动一个rmiregistry,本窗口“阻塞”(不太精确哦,就是不能输入其它命令)。

使用start rmiregistry命令,本窗口出现“提示符”,可以继续输入命令,且跳出一个窗口,也是“阻塞”的哦。

表示正在工作,方法没有返回而已。

注意该窗口的标题了没有!其中奥妙,慢慢体会!4. java –Djava.security.policy=policy.txt FileServer(使用此命令时policy.txt文件必须和FileServer.class在同一目录(本例c盘根目录)中哦!)5. java FileClient 101.txt 127.0.0.1(使用此命令时101.txt必须位于c盘下11目录下哦,要不然没有下面的结果哦!)看看你的c盘根目录,是不是多了一个101.txt啊,是不是和你放在11目录下的101.txt一样啊!成了,到此结束!――六步学会简单RMI。

是否很有成就感啊!(简单地把此代码拷贝过去,按照上面的顺序做就行了!立刻行动吧!)不过以上程序尽管是一个RMI的网络程序,是否太简单了!Java手册中不是说可以传递java对象吗?要是真的能传递对象那就很强大啦!好像有些细节还不是很明白吧!请看下一篇!满足你以上的需求!下篇给你讲述各个接口和类的含义,以及RMI程序符合发布(哪些类位于客户端,哪些类位于服务器端)等等!六步教你学会简单RMI(中)江苏无锡缪小东首先在你的某个目录下建立两个目录client和server,用于存放你的类文件!主要是为了程序的发布!一、 定义远程接口//FileServerInterface1.javaimport java.rmi.Remote;import java.rmi.RemoteException;public interface FileServerInterface1 extends Remote {public FileCarry download(FileCarry file)throws RemoteException ;}同样,它是远程主机提供的客户可以使用的方法的集合!我们在其中仅仅定义了一个方法(你可以根据实际需要写你需要的任何方法!你可以将本程序改造象使用ftp一样,先list一下,看看服务器提供几个可供下载的文件,然后再下载相应的文件!很简单,自己试试吧!),用于从服务器端下载某一个文件!(完成与上面一样的功能,主要用于演示RMI中传递对象!)注意点:1.RMI中使用的接口必须继承Remote接口(直接或间接地,RMI中实现此接口的对象很多一般供编程人员使用的为RemoteObject、RemoteServer、Activatable和UnicastRemoteObject等);2.Remote接口在java.rmi包中,它是一个没有任何方法的标识接口;3.继承Remote接口中的方法,一定要抛出RemoteException异常――它是RMI运行时环境发生异常时抛出的异常,与客户实际可能抛出的异常无关。

(不过你也可以抛出其父异常哦,如IOException、甚至Exception!)二、 定义在RMI中传递对象import java.io.*;public class FileCarry implements Serializable {private String fileName ;private String content ;name){publicFileCarry(StringfileName = name ;}public void setFileName(String filename){;filenamethis.fileName=}getFileName(){publicString;returnthis.fileName}public void setContent(String content){;content=this.content}getContent(){publicStringthis.content;return}}一个简单的类,它有两个属性:String类型的属性fileName表示客户向服务器请求下载的文件的名称,String类型的属性content表示服务器在接受到客户请求后,传递给客户的文件的内容。

其对应的方法也比较简单!一定要注意:用于在RMI中传递的对象必须实现java.io. Serializable接口(该接口为一个没有任何方法的标识接口)。

相关文档
最新文档