- 浏览: 7325768 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在java的开发中不可避免的遇到java网络编程,RMI,EJB的使用,他们的关系是什么呢? RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI是非常容易使用的,但是它非常的强大。RMI的基于特定接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的。
RMI基本原理
要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO来实现,其中传输协议比较出名的有http、tcp、udp等等,http、tcp、udp都是在基于Socket概念上为某类应用场景而扩展出的传输协议,网络IO,主要有bio、nio、aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。
由此可知RMI底层采用网络编程的,既RMi基于套接字编程的,RMI是EJB远程调用的基础,仅用RMI技术就可以实现远程调用,使用EJB是为了实现组件,事物,资源池,集群等功能。
下面RMI学习:
服务接口:
package com.easyway.space.basic.network.sockets.rmi; import java.rmi.Remote; import java.rmi.RemoteException; /** * Rmi服务接口 * 创建远程接口及声明远程方法 * 远程服务接口实现java.rmi.Remote 的接口 * * @author longgangbai * */ public interface RmiMonitorService extends Remote{ public int interactive(int funindex ,String param)throws RemoteException; }
服务接口的实现:
package com.easyway.space.basic.network.sockets.rmi; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; /** * Rmi服务接口的实现 * 实现远程接口及远程方法(继承UnicastRemoteObject) * RMI 实现UnicastRemoteObject类必须实现相关的空构造函数并抛出RemoteException * @author longgangbai * */ public class RmiMonitorServiceImpl extends UnicastRemoteObject implements RmiMonitorService{ /** * */ private static final long serialVersionUID = 1L; /** * 空构造函数 * @throws RemoteException */ protected RmiMonitorServiceImpl() throws RemoteException { super(); } /** * 服务请求频率和监控信息 * @param funindex * @param param */ public int interactive(int funindex, String param) throws RemoteException { return funindex; } }
启动并注册RMI服务:
package com.easyway.space.basic.network.sockets.rmi; import java.net.MalformedURLException; import java.rmi.AlreadyBoundException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; /** * Rmi远程监控的服务端 * * 启动RMI注册服务,并注册远程对象 * * @author longgangbai * */ public class RmiMonitorServer { public String host="localhost"; public int port=8889; /** * 初始化远程服务的方法 */ public void init(){ try { //注册本地端口 LocateRegistry.createRegistry(port); RmiMonitorService monitor=new RmiMonitorServiceImpl(); //rmi绑定本地目录和命名服务 Naming.bind("//"+host+":"+port+"/monitor",monitor); } catch (MalformedURLException e) { System.out.println("发生URL异常!" +e.getMessage());; } catch (AlreadyBoundException e) { System.out.println("发生重复绑定对象异常!" +e.getMessage()); }catch (RemoteException e) { System.out.println("创建远程对象发生异常!" +e.getMessage()); } } public static void main(String[] args) { RmiMonitorServer rmi=new RmiMonitorServer(); System.out.println("RMI服务初始化....."); rmi.init(); } }
客户端查找并使用存根:
package com.easyway.space.basic.network.sockets.rmi; import java.net.MalformedURLException; import java.rmi.Naming; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.util.HashMap; import java.util.Map; /** * Rmi监控的客户端的服务 * * 客户端查找远程对象,并调用远程方法 * * @author longgangbai * */ public class RmiMonitorClient { //用户缓存使用的实例 public Map<Class,Object> serviceMap=new HashMap<Class,Object>(); public RmiMonitorService monitorService; public String ip="localhost"; public int port=8889; public int interactive(int funindex ,String param) { try { if(monitorService==null) { monitorService=getMonitorService(RmiMonitorService.class); } return monitorService.interactive(funindex, param); } catch (RemoteException e) { e.printStackTrace(); } return 0; } /** * 查找服务对象的应用 * @param clazz * @return */ public RmiMonitorService getMonitorService(Class clazz){ try { Object object=serviceMap.get(clazz); if(object==null) { monitorService=(RmiMonitorService)Naming.lookup("rmi://"+ip+":"+port+"/monitor"); serviceMap.put(RmiMonitorService.class, monitorService); }else{ monitorService=(RmiMonitorService)serviceMap.get(clazz); } return monitorService; } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NotBoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return monitorService; } public static void main(String[] args) { RmiMonitorClient client=new RmiMonitorClient(); int result=client.interactive(9, "i love you"); System.out.println("result ="+result); } }
评论
4 楼
longgangbai
2012-07-04
lhc1986 写道
rmi貌似不是基于套接字编程的吧,虽然都是通过ip+端口形式
貌似是的,个人简介纯属个人简介。
3 楼
lhc1986
2012-06-21
rmi貌似不是基于套接字编程的吧,虽然都是通过ip+端口形式
2 楼
longgangbai
2011-01-17
晕死,兄弟,EJB的分布式与ip没有关系的,不知道哥们怎么想的?ip改为非localhost如果不行,怎么还是分布式呢?
晕死,兄弟,EJB的分布式与ip没有关系的,不知道哥们怎么想的?ip改为非localhost如果不行,怎么还叫分布式呢?
空谷悠悠 写道
非常的失望!
这里似乎服务程序和客户端程序都必须运行在本机,假如如客户端运行在其它机器上呢?LZ尝试或将localhost改为其它机器的IP吗?如果行,又该怎么操作,求解答
这里似乎服务程序和客户端程序都必须运行在本机,假如如客户端运行在其它机器上呢?LZ尝试或将localhost改为其它机器的IP吗?如果行,又该怎么操作,求解答
晕死,兄弟,EJB的分布式与ip没有关系的,不知道哥们怎么想的?ip改为非localhost如果不行,怎么还叫分布式呢?
1 楼
空谷悠悠
2011-01-12
非常的失望!
这里似乎服务程序和客户端程序都必须运行在本机,假如如客户端运行在其它机器上呢?LZ尝试或将localhost改为其它机器的IP吗?如果行,又该怎么操作,求解答
这里似乎服务程序和客户端程序都必须运行在本机,假如如客户端运行在其它机器上呢?LZ尝试或将localhost改为其它机器的IP吗?如果行,又该怎么操作,求解答
发表评论
-
[转] J2EE集群原理
2013-07-23 09:57 4524J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念 ... -
[转]J2EE 中间件 JVM 集群
2013-07-23 09:51 25151 前言越来越多的关键任务和大型应用正运行在J2EE平台上,象 ... -
[转]通过 Terracotta实现基于Tomcat的Web应用集群
2013-07-23 09:45 5125转载自: http://blog.csdn.n ... -
Terrocotta - 基于JVM的Java应用集群解决方案
2013-07-23 09:47 2496前言 越来越多的企业 ... -
Quartz与Terracotta的集成
2013-07-22 20:39 2779Quartz与Terracotta的集成 • 综述 • 配置 ... -
Terracotta服务器的不同配置方式
2013-07-22 20:37 2150Terracotta Server有4类配置方式:1、单机,无 ... -
Terracotta 3.2.1简介 (一)
2013-07-22 20:25 2481Terracotta开源项目以及Terracotta公司 ... -
Jvm级别的集群(转)
2013-07-22 20:14 2327Java的垃圾回收机制( ... -
【转】java并发编程-Executor框架
2012-11-28 13:20 3727转载自 http://www.iteye.com/topic ... -
【转】互联网常见Open API文档资源
2012-07-17 17:22 2410原文出处:http://www.williamlong.i ... -
最近项目开发中遇到几个问题
2011-11-25 18:49 18211.JDK1.60安装之后与Apache CXF开发WebSe ... -
Java 文件合并功能
2011-08-25 08:44 3756在项目中在一个文件目录中存放多个临时文件合并文件功 ... -
Java 分割功能实现
2011-08-25 08:39 2788在项目针对比较大的文件需要文件的分割功能,特意写了一个 ... -
在JVM关闭的时候线程该怎么关闭呢
2011-08-21 13:11 2204在编写线程类的时候设置一个标志,用于表示是否开始执行 ... -
Java获取系统IP地址
2011-08-21 13:01 6033在一个项目中如果你想获取系统的ip地址那么可能许多同 ... -
java 网络编程,RMI,EJB之间那些屁事(二)
2010-12-12 14:40 1905使用RMI和EJB的童鞋,都知道EJB有客户端 ... -
JMX 和系统管理
2010-12-04 16:03 5615检测 ... -
关于JDK1.5不支持创建泛型数组的解决方案
2009-12-05 14:59 3819在项目中需要 ... -
JDK1.5中的打印服务
2009-12-01 13:23 2579package com.unutrip.print; imp ... -
Java中静态变量的适用场景
2009-11-28 15:32 2114Java类中的静态变量在程序运行期间,其内存空间对所有 ...
相关推荐
《Java网络编程(第4版)》是一本深入探讨Java平台上的网络编程技术的专业书籍,适合想要提升Java通讯技术的学者阅读。此书全面覆盖了Java网络编程的基础和高级概念,帮助开发者理解如何利用Java语言构建高效、可靠的...
Java作为一种成熟的编程语言,拥有强大的网络和分布式计算能力,这得益于其丰富的API和平台无关性。 首先,Java网络编程是通过Java提供的各种网络类和接口来实现的。Java的***包是进行网络编程的基础,它提供了丰富...
网络编程是计算机科学中的一个重要领域,它涉及到通过网络在不同计算机之间交换信息。RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种机制,用于实现分布式计算,允许一个Java对象调用位于另一...
RMI是Java平台提供的一种分布式计算机制,允许在不同的Java虚拟机之间透明地调用对象的方法,即使这些对象位于不同的网络节点上。 **RMI原理:** RMI的核心思想是将对象的实例化和方法调用过程解耦,使得远程对象...
java网络编程包括socket tcp/udp io/nio讲解 http协议 jdbc rmi java的安全框架等知识
#### 一、Java RMI 分布式编程概述 Java远程方法调用(Remote Method Invocation, RMI)是一种让位于不同Java虚拟机(Java Virtual Machine, JVM)上的对象能够互相调用彼此方法的技术。这一技术极大地促进了程序...
RMI(远程方法调用)是Java实现分布式计算的一种方式,它允许对象在不同的JVM之间透明地调用方法,仿佛它们都在同一个JVM中一样。EJB(企业JavaBean)和Spring框架的远程服务支持也是分布式计算的重要工具。 另外,...
RMI是一种Java技术,它允许开发者创建分布式应用程序,其中Java对象可以在网络的不同节点之间进行通信。通过RMI,一个Java程序能够调用位于另一台计算机上的Java对象的方法,就好像它们在同一台机器上一样。这种能力...
无论你是经验丰富的网络开发人员、Java程序员新手,还是只希望对Java网络编程稍有些了解的人,都会发现《Java编程(第三版)》将成为你的书库中一个重要的部分。一旦开始使用Java网络API,只要你能想到它就能够做...
Java RMI(远程方法调用)是Java编程语言中的一项核心技术,自JDK 1.1版本起就被引入,用于构建分布式系统。RMI允许Java对象在不同的Java虚拟机(JVMs)之间进行交互,仿佛这些对象是在同一台机器上一样。这种技术的...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,就像它们在同一个进程内一样。RMI是Java在分布式系统领域的核心特性,极大地...
10. **RMI(远程方法调用)**:Java的RMI机制使得Java对象可以在不同的JVM之间进行交互,实现分布式服务。 11. **JMS(Java消息服务)**:用于在分布式环境中发送和接收消息,是解耦和异步处理的关键技术。 12. **...
在这个"java 网络编程 代码集合"中,包含了多个示例项目,覆盖了从基础的TCP/IP通信到高级的RMI(远程方法调用)以及SMTP(简单邮件传输协议)的应用。下面将对这些知识点进行详细解释。 1. **TCP/ECHO**:TCP...
10. **网络编程**:RMI涉及TCP/IP网络编程,客户端和服务器之间通过Socket进行通信。理解套接字编程的基本原理有助于深入理解RMI的工作机制。 以上是关于“java RMI技术实现的网络聊天室”的主要知识点。通过这个...
Java中的EJB编程实例代码,内容有:简单的EJB、无状态SessionBean、有状态SessionBean、BMP位图实例、cmp实例、Message-Driven Bean、JNDI的使用、112各种EJB之间的调用、B-S结构EJB、 C-S结构EJB、UML建模与J2EE...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行远程对象的调用。RMI使得开发者可以像调用本地对象一样调用网络上的对象,极大地简化了...
它允许Java对象在不同的Java虚拟机(JVM)之间进行交互,仿佛它们都在同一台机器上运行。这个"java_in_rmi.rar"压缩包包含了学习和精通RMI的基础资料,非常适合初学者深入理解这一主题。 首先,RMI的核心概念是远程...
它允许Java对象在不同的JVM(Java虚拟机)之间进行通信,仿佛这些对象都在同一台机器上运行。RMI使得开发分布式系统变得更加简单,因为开发者可以像调用本地方法一样调用远程对象的方法。 在Java RMI中,主要有以下...
Java RMI(Remote Method Invocation)是Java平台提供的一种分布式计算技术,它允许一个Java对象调用网络另一端的Java对象的方法,仿佛它们在同一个进程中执行。这个教程“Rmi.rar”显然包含了关于如何使用Java RMI...