- 浏览: 253710 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (232)
- 瞎扯两句 (8)
- 操作系统 (5)
- 工作笔记 (33)
- 设计模式 (1)
- java (57)
- Java IDE (7)
- hibernate (17)
- oracle (46)
- ms sql (2)
- spring (9)
- struts2 (0)
- javascript (16)
- java_code (2)
- java之集合 (2)
- java之线程 (4)
- java之IO (4)
- java之虚拟机 (6)
- java之异常 (0)
- EJB (4)
- XML (4)
- 数据结构-算法 (2)
- 架构设计 (5)
- 配置信息 (2)
- 阅读笔记 (6)
- IT专业英语 (1)
- PI (0)
- 单元测试 (1)
最新评论
1.
server端代码:
Registry registry= LocateRegistry.createRegistry(8888); //在当前主机的port如8888上创建RMI的Registry注册服务。
registry.bind("RHello",rhello); //注册服务
//或者可以用下边的方式,这样可以指定要注册的服务所在的host地址。
//Naming.bind("rmi://localhost:8888/RHello",rhello);
client端代码:
IHello rhello =(IHello) Naming.lookup("rmi://localhost:8888/RHello");
2. 个人理解:
其实主要是java的rmi接口的具体实现将网络层的相关实现封装起来了。
暴露给程序员的接口主要是 怎么进行注册和查找。
具体的原理实现在底层,和网络技术,计算机底层相关。
为了通过Java的序列化机制来进行传输,远程接口中的方法的参数和返回值,要么是Java的基本类型,要么是远程对象,要么是实现了 Serializable接口的Java类。当客户端通过RMI注册表找到一个远程接口的时候,所得到的其实是远程接口的一个动态代理对象。当客户端调用其中的方法的时候,方法的参数对象会在序列化之后,传输到服务器端。服务器端接收到之后,进行反序列化得到参数对象。并使用这些参数对象,在服务器端调用实际的方法。调用的返回值Java对象经过序列化之后,再发送回客户端。客户端再经过反序列化之后得到Java对象,返回给调用者。这中间的序列化过程对于使用者来说是透明的,由动态代理对象自动完成。除了序列化之外,RMI还使用了动态类加载技术。当需要进行反序列化的时候,如果该对象的类定义在当前JVM中没有找到,RMI会尝试从远端下载所需的类文件定义。可以在RMI程序启动的时候,通过JVM参数java.rmi.server.codebase来指定动态下载Java类文件的URL。
server端代码:
Registry registry= LocateRegistry.createRegistry(8888); //在当前主机的port如8888上创建RMI的Registry注册服务。
registry.bind("RHello",rhello); //注册服务
//或者可以用下边的方式,这样可以指定要注册的服务所在的host地址。
//Naming.bind("rmi://localhost:8888/RHello",rhello);
client端代码:
IHello rhello =(IHello) Naming.lookup("rmi://localhost:8888/RHello");
2. 个人理解:
其实主要是java的rmi接口的具体实现将网络层的相关实现封装起来了。
暴露给程序员的接口主要是 怎么进行注册和查找。
具体的原理实现在底层,和网络技术,计算机底层相关。
为了通过Java的序列化机制来进行传输,远程接口中的方法的参数和返回值,要么是Java的基本类型,要么是远程对象,要么是实现了 Serializable接口的Java类。当客户端通过RMI注册表找到一个远程接口的时候,所得到的其实是远程接口的一个动态代理对象。当客户端调用其中的方法的时候,方法的参数对象会在序列化之后,传输到服务器端。服务器端接收到之后,进行反序列化得到参数对象。并使用这些参数对象,在服务器端调用实际的方法。调用的返回值Java对象经过序列化之后,再发送回客户端。客户端再经过反序列化之后得到Java对象,返回给调用者。这中间的序列化过程对于使用者来说是透明的,由动态代理对象自动完成。除了序列化之外,RMI还使用了动态类加载技术。当需要进行反序列化的时候,如果该对象的类定义在当前JVM中没有找到,RMI会尝试从远端下载所需的类文件定义。可以在RMI程序启动的时候,通过JVM参数java.rmi.server.codebase来指定动态下载Java类文件的URL。
发表评论
-
servletcontext 的获取
2013-05-12 20:10 477容器在初始化servlet时,会为其注入servletconf ... -
取得下一个sequence。 getNextInterval
2013-03-15 11:47 9391. 初始sequence值放置于数据库。 2. 启动时产 ... -
java 脚本,编译与注解处理
2013-02-05 10:04 8511.java中支持脚本调用 通过脚本引擎来执行。 Obj ... -
java 安全管理器
2013-02-04 11:24 8301.在java语言实现中,扩展和系统加载器都是java实现的, ... -
Java获取当前路径
2013-01-22 18:12 896无论是抽象路径名还是路径名字符串,都可以是绝对 路径名或相对 ... -
java1.5 新特性
2013-01-10 16:50 764"JDK1.5"的一个重要主题就是通过新增 ... -
import static静态导入
2013-01-10 12:12 849import static静态导入是JDK1.5中的新特性。一 ... -
类加载器加载的类的访问权限问题
2013-01-04 15:34 10521.父加载器加载的类不能访问子加载器加载的类。 (向下可见性) ... -
java 内部类总结
2012-12-28 12:31 745主要从分类和使用情境来看 1. 普通内部类。 位置: 在 ... -
java构造函数和静态变量的执行顺序
2012-12-18 11:18 1035java初始化顺序 1在new B一个实例时首先要进行类的装载 ... -
Java多线程之Condition接口的实现
2012-11-26 17:03 937在实际中一个lock可产生多个Condition对象。个人认为 ... -
java线程同步原理(lock,synchronized)
2012-11-26 14:26 998一。 java线程同步原理 java会为每个object对象分 ... -
总结下java中abstract,interface,final,static,加深理解
2012-11-16 17:16 888一,抽象类:abstract 1,只要有一个或一个 ... -
为什么interface的变量必须是public final static的
2012-11-16 17:15 1017public 感觉是因为Java对接口的要求是所有类都可以实现 ... -
stack在排序的应用
2012-10-22 17:04 718对于list, 可用Collections的静态方法 Coll ... -
随机访问文件RandomAccessFile 与 内存映射文件MappedByteBuffer
2012-09-25 14:59 1575RandomAccessFile RandomAccessF ... -
Java 服务器端支持断点续传的源代码
2012-09-25 14:44 4037Java 服务器端支持断点续传的源代码【支持快车、迅雷】(仅支 ... -
new File(String parent,String child)
2012-08-22 23:00 1169//user_dir:E:\workspace\javates ... -
System.getProperty
2012-08-22 22:07 914System.getProperty(String name) ... -
JAVA中SERIALVERSIONUID的解释
2012-08-01 12:05 662serialVersionUID作用: 序列化 ...
相关推荐
1. 易于使用:RMI提供了简单的API,开发者只需关注业务逻辑,无需关心底层网络通信细节。 2. 高效:Java的序列化机制使得数据传输效率较高。 3. 安全:基于Java的安全模型,可以进行细粒度的权限控制。 缺点: 1. ...
总的来说,Java RMI是一种强大的工具,允许开发者构建分布式系统,它简化了网络编程的复杂性,使得开发者可以专注于业务逻辑,而无需过多关注底层通信细节。理解并掌握RMI技术对于构建可扩展、健壮的Java分布式应用...
综上所述,RMI是Java开发分布式应用程序的关键工具,它通过简单的API隐藏了底层的网络复杂性,使开发者能够专注于业务逻辑。了解和掌握RMI,对于构建健壮的分布式系统至关重要。在实际项目中,我们可以通过不断的...
总之,Java RMI是构建分布式Java应用的重要工具,它简化了网络通信的复杂性,让开发者可以专注于业务逻辑,而不是底层网络实现。虽然现代的Java框架如Spring、EJB等提供了更高级别的分布式服务,但理解RMI的基本原理...
总的来说,Java RMI提供了一种强大的工具,使得开发者可以轻松地构建和扩展分布式应用程序,而无需关心底层网络通信的复杂性。通过理解RMI的基本原理和实现步骤,开发者能够更好地利用这项技术来提升应用的可扩展性...
RMI负责处理网络通信和数据序列化,开发者只需关注业务逻辑,无需关心底层网络细节。 这个"java_rmi.rar"压缩包包含的资源可能是一个Java RMI的实例教程或者代码示例。"www.pudn.com.txt"可能是一个包含相关说明...
3. **传输层**:最底层处理实际的数据传输,通常使用Java的Socket API来实现。 ### RMI编程 #### 定义远程接口 在实现RMI之前,首先需要定义一个远程接口。这个接口必须继承自`java.rmi.Remote`接口,并且声明...
在IT行业中,远程方法调用...同时,理解RMI的底层原理和Spring的相关配置,对于提升系统性能和可靠性至关重要。在实际开发中,结合源码阅读和使用工具,如IDE的调试功能,可以帮助我们更好地理解和优化RMI服务。
RMI的核心思想是通过接口隐藏底层网络通信的复杂性,使得程序员可以像操作本地对象一样操作远程对象。 在RMI中,远程接口扮演着至关重要的角色。当需要创建一个远程对象时,程序员会定义一个继承自`java.rmi.Remote...
7. JMS:远程访问通过类JmsInvokerServiceExporter和JmsInvokerProxyFactoryBean使用JMS的底层协议实现。 二. 远程访问------RMI 1. RMI远程访问基本流程 1). 服务端定义远程访问接口; 2). 服务端通过...
- `RmiProxyFactoryBean`用于创建一个RMI客户端代理,该代理可以像本地对象一样调用远程对象的方法,隐藏了底层的网络通信细节。 4. 整合步骤: - 定义远程接口和实现:首先,我们需要定义一个远程接口,并在...
- **网络通信(Networking)**:RMI负责底层的网络通信,包括序列化参数和返回值,以及异常处理。 在"chapter3"中,可能包含了实现这些组件的源代码。例如,可能有`ChatServer.java`(服务器实现)、`ChatService....
在Web服务器与RMI结合的场景中,Socket可以作为底层通信机制,使得Web服务器能够通过RMI与远程服务进行通信。 在"web服务器 RMI meeting sokect"的会议中,可能的讨论点包括: 1. 如何在Web服务器上实现RMI服务,...
2. **EJB(Enterprise JavaBeans)**: EJB容器利用RMI作为底层通信机制,使得组件能够在不同的JVM间透明交互。 3. **Web服务器与应用服务器间的通信**: 如Servlets通过RMI与EJB交互。 4. **网格计算**: 在大规模...
RMI的优点在于它简化了跨JVM的通信,使得开发者能够专注于业务逻辑,而不是底层网络通信细节。然而,RMI也存在一些限制,如不支持异步调用,且性能可能受到网络延迟的影响。 在这个实验中,我们不仅学习了如何创建...
RMI的目标是使得分布在网络上的对象能够像本地对象一样工作,实现位置透明性,隐藏底层复杂的网络通信细节。这种技术允许开发者在不关心对象实际位置的情况下,调用远程对象的方法。 ### RMI的基本结构 RMI的核心...
RMI使得开发分布式应用程序变得简单,因为开发者不需要关注底层网络通信的细节,而是专注于业务逻辑的实现。 **RMI架构** RMI架构包含了以下几个主要组件: 1. **远程接口**:定义了可以被远程调用的方法,这个接口...
在RMI系统中,Socket通信作为底层传输机制,确保数据在网络中的安全传输。Socket编程为RMI提供了网络连接的基础,使得客户端和服务端能够进行双向通信。同时,由于RMI是基于Java的,因此它还利用了Java的序列化机制...
相比于传统的RPC,RMI进一步简化了分布式对象之间的通信机制,使得开发者能够更加专注于业务逻辑而不用担心底层通信细节。 #### 2. RMI的用途 RMI主要用于分布式Java应用程序之间的远程通信。其核心优势在于: - ...
在网格计算或云计算中,RMI可以作为节点间通信的底层机制。 总结,Java RMI为Java开发者提供了一种简单、高效的分布式计算解决方案,通过RMI,开发者可以轻松地构建跨JVM的分布式应用程序,实现对象间的远程方法...