- 浏览: 82257 次
- 性别:
- 来自: 上海
最新评论
-
surprising:
[color=darkred][/color]交换机
jdk rmi 代码分析 -
weibei:
what?
java.lang.reflect.Type
RMI
早期对于rmi来说,客户端需要stub,服务器端需要skeleton.jdk因为有了反射,而不需要Skeleton
jdk因为有了aop,而不需要Stub
对于Registry来说,还是使用默认RegistryImpl_Skel,RegistryImpl_Stub.
什么是rmi
我在这里不解释他的字面意思,因为这个太原始
rmi是sun开发,遵循JRMP协议,因为他被发布在jre中,所有很多人只把它当作很普通的api来使用,所以它里面做了什么,很多人都不清楚.
rmi到底是什么?
socket框架
socket框架在早期就是起一个serversocket,socket来连接它,server根据传过来的key来做相应的返回(自己的协议),这是最原始的网络开发。
目前企业开发都是面向对象,什么都是以对象为单位,所有socket框架首先就应该隐藏上面的协议,以对象为单位。
对象调用
比如:Hello是一个接口,有一个print()方法。
对象暴露
使用:java.rmi.server.UnicastRemoteObject.exportObject(Remote obj,int port)
在暴露的过程中产生相关remote接口的aop实现,并注册到registry中去.
命名服务
服务器端对象暴露,并把接口的aop实现注册到registry中去,客户端只需要registry.lookup接口的aop即可,并可以通过这个aop接口实现于接口真正实现通信。
aop
目前aop,在运行态使用的,我知道有两种一种是jdk中java.lang.reflect,一个就是asm。其他的好像对他们的包装,比如cglib.
rmi的log
rmi日志管理使用java.util.logging
例子logging.properties
rmi端口
rmi分两个端口rmi名称服务端口
api使用方法:LocateRegistry.createRegistry(端口)
服务端口
api使用方法:UnicastRemoteObject.exportObject(服务对象,端口),多次调用这个方法,如果端口一样,会使用同一个serversocket,不会发生错误
spring使用
spring使用包装过的rmi,服务对象不再需要实现Remote接口,
我们平时使用只会使用registryPort,而不是忘记使用servicePort.如果不指定servicePort,servicePort=0,将会有系统指定。
rmi属性sun.rmi.transport.tcp.readTimeout:
等同于socket.setSoTimeout(int timeout),RMI默认值是2 * 3600 * 1000,2个小时.
sun.rmi.transport.tcp.handshakeTimeout:
socket握手超时设置,默认一分钟.
sun.rmi.transport.tcp.responseTimeout:
socket 读超时设置,只有当RMISocketFactory相关属性没有设置,才起作用,默认不超时
sun.rmi.transport.connectionTimeout:
rmi的socket是长期连接的,只有timeout时,才会socket.close();默认是的值是15
sun.rmi.transport.tcp.responseTimeout:
客户端socket的timeout, 默认不超时
早期对于rmi来说,客户端需要stub,服务器端需要skeleton.
什么是rmi
我在这里不解释他的字面意思,因为这个太原始
rmi是sun开发,遵循JRMP协议,因为他被发布在jre中,所有很多人只把它当作很普通的api来使用,所以它里面做了什么,很多人都不清楚.
rmi到底是什么?
- rmi是一套足够优秀的socket框架.
- rmi是相对比较简单命名服务
- rmi是aop的经典实用例子
- 相关辅助功能,比如本地GC
socket框架
socket框架在早期就是起一个serversocket,socket来连接它,server根据传过来的key来做相应的返回(自己的协议),这是最原始的网络开发。
目前企业开发都是面向对象,什么都是以对象为单位,所有socket框架首先就应该隐藏上面的协议,以对象为单位。
Hello hello = ... 记住得到hello这个对象是使用aop包装过的Hello对象(jdk1.5以后,如果以前的版本得到是Hello_Stub,这个需要预先生产) hello.print(); 远程调用在这里,包括返回。
在暴露的过程中产生相关remote接口的aop实现,并注册到registry中去.
命名服务
服务器端对象暴露,并把接口的aop实现注册到registry中去,客户端只需要registry.lookup接口的aop即可,并可以通过这个aop接口实现于接口真正实现通信。
aop
目前aop,在运行态使用的,我知道有两种一种是jdk中java.lang.reflect,一个就是asm。其他的好像对他们的包装,比如cglib.
rmi的log
rmi日志管理使用java.util.logging
例子logging.properties
handlers= java.util.logging.FileHandler .level= SEVERE java.util.logging.FileHandler.level = ALL java.util.logging.FileHandler.pattern = d:\\java1.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter sun.rmi.transport.level = FINE
rmi端口
rmi分两个端口
spring使用
spring使用包装过的rmi,服务对象不再需要实现Remote接口,
我们平时使用只会使用registryPort,而不是忘记使用servicePort.如果不指定servicePort,servicePort=0,将会有系统指定。
rmi属性
发表评论
-
互联网相关 WEB Framework
2011-04-23 11:51 915由于很多原因,一般做互联网的,如果不考虑时间和资源 ... -
序列化相关
2011-04-18 12:13 816序列化 作用: 很显然就是,主要让对象可以在多个jvm ... -
互联网相关 request参数
2011-04-09 12:30 1200通常互联网请求包括两种类型 get,post,他们请求所带参数 ... -
互联网相关 URL编码
2011-04-09 10:53 792互联网 URL 按照标准,URL中只能出现US-ASCII字 ... -
Velocity 的好处
2011-04-07 15:12 1437真正意义的mvc 跟jsp相比,它算真正意义的mvc,因 ... -
Spring scheam中的p 属性
2011-03-29 12:04 919http\://www.springframework.org ... -
数据结构 相关知识
2011-03-29 11:40 729Stack last-in-first-out ,jdk ... -
java.lang.reflect.Type
2011-03-28 18:12 1434java.lang.reflect.Type: 什么是jav ... -
Thread 相关问题
2011-03-28 16:16 772Double-checked locking h ... -
互联网 相关安全问题
2011-03-25 17:58 868下面是一些互联网应用中可能遇到的一些安全问题 ... -
request.getRemoteAddr方法为null
2011-03-02 16:01 5471在单独servlet container 里,request ... -
equinox一个web应用的例子
2010-12-03 13:08 848这是我2008写的一个使用equinox的web的简单例子,个 ... -
JMX相关
2010-11-17 15:57 891建立一个MBeanServer 有两种类型 建立普通的 ... -
定制sql语句的方法
2010-11-16 10:17 972hibernate 定制sql语句的方法: sql ... -
关于hibernate batchsize一些分析
2010-09-26 10:31 1987关于hibernate batchsize一些分析: ... -
mysql 乱码问题
2010-08-10 12:27 602Mysql乱码问题: 主要是配置你的connection参数 ... -
Thread 分析
2010-07-22 11:54 775interrupt() 这个方法,一般情况把 ... -
Svn keywords
2010-05-27 20:22 1032Svn现在已经有点out了,p2p的技术现在是流行,连Apac ... -
jboss 代码分析
2010-04-30 15:25 892Jboss是一个j2ee服务器,使用它自己的ioc,也就是m ... -
annotation 的理解
2010-04-21 11:12 816Annotation: 表现形式,就是code中 @*** ...
相关推荐
**Java Development Kit (JDK) 1.6 源码包详解** JDK 1.6源码包是Java编程语言的核心开发工具集,它包含了大量的类库和工具,为开发者提供了深入理解Java平台工作原理的机会。源码包允许程序员查看并研究Java API的...
【标题】"深入理解JDK 1.4源码:初学者的宝藏" 【正文】 在编程领域,尤其是Java开发者,对JDK源码的研究是提升技能的重要途径。JDK 1.4作为早期版本,虽然现在已被更新的版本替代,但它依然具有深远的学习价值,...
Spring RMI(Remote Method Invocation)...通过分析服务端和客户端的源码,我们可以深入理解如何在Spring框架下实现和使用RMI远程调用,这对于任何希望在分布式系统中利用Spring的开发者来说都是一份宝贵的参考资料。
7. **jdk.internal.vm.ci**: 这是JDK的编译接口,与JIT编译器紧密相关,可能涉及编译器优化和分析的内部实现。 8. **jdk.aot**: 提前编译(AOT)技术允许Java代码在运行前被编译为本机代码,以提升启动速度和性能。...
【标题】"jdk14的源码src文件"揭示了Java开发工具包(JDK)的第14个主要版本的源代码。JDK是Java编程语言的核心组件,包含了编译器、运行时环境和各种工具,使得开发者能够创建、运行和理解Java应用程序。 【描述】...
在JDK5之前,使用RMI是一项相对复杂的工作,涉及到多个步骤,包括定义远程接口、编写服务端和客户端代码、生成Stub和Skeleton等。这些繁琐的操作使得许多开发者转而寻求其他解决方案,如使用EJB作为一种对RMI的封装...
Java JDK21源码分析 Java Development Kit (JDK) 是Java编程语言的核心组件,它包含了一套完整的开发工具和运行环境。JDK21是其特定版本,提供了许多关键功能和改进。以下是对JDK21源码中部分关键模块的详细解析: ...
源码分析可以帮助我们理解FXML是如何与Java代码交互,以及如何动态加载和控制UI元素的。 `java.xml.bind`模块是Java Architecture for XML Binding(JAXB)的一部分,它实现了将Java对象和XML数据之间的自动转换。...
- **基本类型和已序列化的类**:在RMI中,可以直接使用基本类型和JDK中已实现序列化的类作为参数或返回值。 2. **定义远端接口**: - **继承Remote接口**:远端接口必须继承`java.rmi.Remote`,这是RMI的核心接口...
《深入解析JDK11源码》 JDK11是Java开发工具包的一个重要版本,它包含了丰富的功能和性能优化。"jdk11.src.zip"这个压缩包提供了JDK11的源代码,这对于开发者来说是一份极其宝贵的资源,能够帮助我们深入了解Java...
本篇将深入探讨如何利用JDK 1.5版本搭建一个基本的分布式Java RMI程序。RMI是Java在分布式计算领域的重要工具,它简化了网络应用的开发,使得开发者可以像操作本地对象一样操作远程对象。 首先,我们需要了解RMI的...
这个"java rmi HelloWorld版(源码)"的压缩包文件提供了一个简单的RMI应用示例,帮助开发者了解和学习RMI的基本原理和使用。 RMI的核心概念包括: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口...
本压缩包文件"rmi-code"包含了一个完整的RMI测试代码示例,适合在Linux和Windows平台上运行,帮助开发者理解和实践RMI的基本操作。 首先,我们需要了解RMI的核心概念: 1. **远程接口**:定义了远程对象需要暴露的...
在Mac操作系统中,由于默认可能不包含这个源码文件,所以当开发者需要查看或分析Java标准库的源代码时,就需要手动添加`src.zip`。通过将这个压缩包解压并导入到IDE(如Eclipse或IntelliJ IDEA)中,开发者可以方便...
Java RPC和RMI代码实战,有关键注释,为最简案例。Maven搭建,JDK8编译。 RPC体验:依次运行RpcProvider和RpcConsumer类。 RMI体验:RMITest中依次运行testServer和testClient方法。
Java Remote Method Invocation (RMI) 是Java平台提供的一种分布式计算技术,它允许在不同网络位置的Java对象之间进行远程调用。RMI是Java在分布式环境中实现对象间通信的重要手段,使得开发者可以像操作本地对象...
标题“jdk15的源码src文件”表明我们要讨论的是Java Development Kit(JDK)的第15个主要版本的源代码。源代码是编程的基础,它揭示了Java语言的核心实现,让我们可以深入理解其工作原理。JDK 15的发布日期为2020年8...
要运行这个示例,你需要确保Java环境已经配置好,包括设置JDK路径,启动RMI注册表,编译源代码,然后分别运行服务器和客户端程序。通过调试和分析这个示例,你可以更好地理解RMI的工作流程和实现细节。 总的来说,...
在本文中,我们将深入探讨Java Remote Method Invocation (RMI)技术,通过一个具体的实例来学习如何设置、构建和调试RMI应用。RMI是Java提供的一种远程对象调用机制,它允许Java对象在不同的JVM之间进行通信。在这个...
《RMI会议管理系统代码解析与应用》 远程方法调用(Remote Method Invocation,RMI)是Java编程语言中实现分布式计算的一种技术。它允许Java对象在不同的Java虚拟机(JVM)之间进行通信,仿佛它们是在同一台机器上...