Java远程方法调用(Remote Method Invocation,RMI)
Java RMI简介:
它是Java的一个核心API和类库,允许一个Java虚拟机上运行的Java程序调用不同虚拟机上运行的对象中的方法,即使这两个虚拟机运行于物理隔离的不同主机上。
Java RMI在JDK1.1版本已经存在,是非常重要的底层技术。
下面通过一个简单的例子来测试:
package com.tc.remote; import java.rmi.Remote;
import java.rmi.RemoteException; /**
* 一个远程调用接口RMIQueryStatus
* 远程接口必须声明为public
* 远程接口必须继承自java.rmi.Remote
*/
public interface RMIQueryStatus extends Remote{ // 远程调用中的方法必须抛出RemoteException异常
RMIFileStatus getFileStatus(String filename) throws RemoteException; }
package com.tc.remote; import java.io.Serializable; /**
* RMI文件状态类,远程调用方法返回的对象
*/
public class RMIFileStatus implements Serializable{ private String filename; public RMIFileStatus() {
} public RMIFileStatus(String filename) {
this.filename = filename;
} @Override
public String toString() {
return "RMIFileStatus{" +
"filename='" + filename + '\'' +
'}';
} }
package com.tc.remote; import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject; /**
* 远程接口的实现 .
*/
public class RMIQueryStatusImpl extends UnicastRemoteObject implements RMIQueryStatus { /**
* 因为UnicastRemoteObject的构造函数抛出了RemoteException异常
* 这里默认构造方法必须写
* @throws RemoteException
*/
public RMIQueryStatusImpl() throws RemoteException {
} @Override
public RMIFileStatus getFileStatus(String filename) throws RemoteException {
RMIFileStatus status = new RMIFileStatus(filename);
// ...进行处理
return status;
} }
package com.tc.remote; import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry; /**
* 创建RMI注册表,启动RMI服务,并将远程对象注册到RMI注册表中。
*/
public class RMIQueryStatusServer { public static String RMI_URL = "rmi://localhost:8888/RHello"; public static void main(String[] args) {
try {
RMIQueryStatusImpl queryStatus = new RMIQueryStatusImpl();
// 注册表创建
LocateRegistry.createRegistry(8888);
// 绑定远端对象到名字
Naming.rebind(RMI_URL,queryStatus);
// Naming.bind(RMI_URL,queryStatus);
// bind方法在已经为一个名字绑定一个对象,再向此名称绑定对象,会抛出异常
// 而使用rebind方法不会
System.out.println(">>>>>INFO:远程RMIQueryStatus对象绑定成功!");
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
} }
package com.tc.remote; import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException; /**
* 客户端测试,在客户端调用远程对象上的远程方法,并返回结果。
*/
public class RMIQueryStatusClient { public static void main(String[] args) {
try {
RMIQueryStatus queryStatus = (RMIQueryStatus) Naming.lookup(RMIQueryStatusServer.RMI_URL);
// 调用远程方法,该调用如同调用本地方法
RMIFileStatus status = queryStatus.getFileStatus("爆炸");
System.out.println(status);
} catch (NotBoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
} }
先运行RMIQueryStatusServer 的main方法:
注意:虽然main方法的执行很快,但是服务器还是会继续运行的,红色的方块表示了运行。
再运行RMIQueryStatusClient 的main方法:
这里只是简单的进行了测试,感觉Client需要拿到Server的RMI_URL,还是有比较强的依赖性。
希望实际项目中用到以后能够有更深刻的理解。
http://docs.oracle.com/javase/8/docs/technotes/guides/rmi/index.html
Java远程方法调用(Remote Method Invocation,RMI)的更多相关文章
- Spring之RMI 远程方法调用 (Remote Method Invocation)
RMI 指的是远程方法调用 (Remote Method Invocation) 1. RMI的原理: RMI系统结构,在客户端和服务器端都有几层结构. 方法调用从客户对象经占位程序(Stub).远程 ...
- Spring Remoting: Remote Method Invocation (RMI)--转
原文地址:http://www.studytrails.com/frameworks/spring/spring-remoting-rmi.jsp Concept Overview Spring pr ...
- java的RMI(Remote Method Invocation)
RMI 相关知识RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络 ...
- K:java中的RMI(Remote Method Invocation)
相关介绍: RMI全称是Remote Method Invocation,即远程方法调用.它是一种计算机之间利用远程对象互相调用,从而实现双方通讯的一种通讯机制.使用这种机制,某一台计算机(虚拟机) ...
- RMI(Remote Method Invocation ) 概念恢复
1.RMI是远程方法调用的简称,像其名称暗示的那样,它能够帮助我们查找并执行远程对象,通俗的说,远程调用就像一个class放在A机器上,然后在B机器中调用这个class的方法. 2.EMI术语 在研究 ...
- Java远程方法调用(RMI)
Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...
- 【杂谈】对RMI(Remote Method Invoke)的认识
前言 对RMI接触的也比较早,基本上刚学完Java基础不久就机缘巧合遇到了.当时有尝试着去了解,但是没看到比较好的教程,而且对网络编程相关知识不太了解,看了不少文章,也没弄明白.现在对网络和I/O有了 ...
- Java自带RPC实现,RMI框架入门
Java自带RPC实现,RMI框架入门 首先RMI(Remote Method Invocation)是Java特有的一种RPC实现,它能够使部署在不同主机上的Java对象进行通信与方法调用,它是一种 ...
- bubbo调用Failed to invoke remote method异常解决
bubbo调用服务异常: com.alibaba.dubbo.rpc.RpcException: Failed to invoke remote method: getPlanFlowInfo, pr ...
随机推荐
- py-faster-rcnn +cudnn V5
转载自http://blog.csdn.net/u010733679/article/details/52221404,经过实际操作,采用了第二种手动替换代码文件.修改个别函数名的方式,成功编译. - ...
- 使用Maven Assembly plugin将依赖打包进jar
一个Eclipse的工程,在pom中配置了若干依赖,需要将pom中所有的依赖全部打包进一个jar包中,可以选择的方案有maven-assembly-plugin和fatjar.以前采用fatjar进行 ...
- 搭建spring mvc项目
在之前搭建maven项目这篇的基础上继续集成,引入spring mvc支持 一.添加jar包引用 修改pom.xml文件,加入:(其他关联的jar包maven会自动引用) <!-- 项目属性 - ...
- <<< chm格式文件打不开及一些问题
CHM 意为 Compiled HTML.以CHM为扩展名的文件图标通常为一个带问号的文档图标,表示帮助文档,是 Microsoft 自 Windows 98 以来提供的一种帮助文档格式的文件,用于替 ...
- 使用css打造形形色色的形状!
使用css打造形形色色的形状! css是非常强大的工具,如果我们掌握的好,那么许多复杂的形状不需要使用图片而直接使用css完成即可,这不仅有利于减少http请求以增强性能还便于日后的管理和维护,一举两 ...
- Win7旗舰版-X86-X64-快速装机版
装机版作品简介 Win7 32/64位旗舰版 6.5z 专注于Win7,致力于做更好用的系统!一如既往的品质,不流氓,不欺骗,不夸大!一直在改进,只为做得更好!万千用户的信赖,作者的品质保证! 作品摘 ...
- C#环境
- 好用的开源web系统总结
1.论坛 phpwind 一个用wind框架写的论坛 discuz 社区动力 论坛 2.商城 Ecshop 商城腾讯的开源商城项目 一款B2C独立网店系统,系统是基于PHP语言及MYS ...
- C# 的TCP Socket (同步方式)
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...
- 第二轮冲刺-Runner站立会议04
今天:查看gridview与baseadapter的连接 明天准备做什么:继续gridview与baseadapter适配器 遇到的困难:暂无