`
hzh0725
  • 浏览: 82257 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jdk rmi 代码分析

    博客分类:
  • java
阅读更多
RMI
早期对于rmi来说,客户端需要stub,服务器端需要skeleton.
  • jdk因为有了反射,而不需要Skeleton
  • jdk因为有了aop,而不需要Stub
  • 对于Registry来说,还是使用默认RegistryImpl_Skel,RegistryImpl_Stub.

  • 什么是rmi
    我在这里不解释他的字面意思,因为这个太原始

    rmi是sun开发,遵循JRMP协议,因为他被发布在jre中,所有很多人只把它当作很普通的api来使用,所以它里面做了什么,很多人都不清楚.

    rmi到底是什么?
    • rmi是一套足够优秀的socket框架.
    • rmi是相对比较简单命名服务
    • rmi是aop的经典实用例子
    • 相关辅助功能,比如本地GC


    socket框架
    socket框架在早期就是起一个serversocket,socket来连接它,server根据传过来的key来做相应的返回(自己的协议),这是最原始的网络开发。

    目前企业开发都是面向对象,什么都是以对象为单位,所有socket框架首先就应该隐藏上面的协议,以对象为单位。
  • 对象调用
  • 比如:Hello是一个接口,有一个print()方法。

    Hello hello = ... 记住得到hello这个对象是使用aop包装过的Hello对象(jdk1.5以后,如果以前的版本得到是Hello_Stub,这个需要预先生产)
    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

    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分两个端口
  • 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, 默认不超时
    1
    0
    分享到:
    评论
    1 楼 surprising 2015-09-28  
    [color=darkred][/color]交换机

    相关推荐

      jdk1.6源码包

      **Java Development Kit (JDK) 1.6 源码包详解** JDK 1.6源码包是Java编程语言的核心开发工具集,它包含了大量的类库和工具,为开发者提供了深入理解Java平台工作原理的机会。源码包允许程序员查看并研究Java API的...

      jdk1.4 源码,初学必备哦~

      【标题】"深入理解JDK 1.4源码:初学者的宝藏" 【正文】 在编程领域,尤其是Java开发者,对JDK源码的研究是提升技能的重要途径。JDK 1.4作为早期版本,虽然现在已被更新的版本替代,但它依然具有深远的学习价值,...

      spring rmi 源码

      Spring RMI(Remote Method Invocation)...通过分析服务端和客户端的源码,我们可以深入理解如何在Spring框架下实现和使用RMI远程调用,这对于任何希望在分布式系统中利用Spring的开发者来说都是一份宝贵的参考资料。

      jdk12源代码

      7. **jdk.internal.vm.ci**: 这是JDK的编译接口,与JIT编译器紧密相关,可能涉及编译器优化和分析的内部实现。 8. **jdk.aot**: 提前编译(AOT)技术允许Java代码在运行前被编译为本机代码,以提升启动速度和性能。...

      jdk14的源码src文件

      【标题】"jdk14的源码src文件"揭示了Java开发工具包(JDK)的第14个主要版本的源代码。JDK是Java编程语言的核心组件,包含了编译器、运行时环境和各种工具,使得开发者能够创建、运行和理解Java应用程序。 【描述】...

      JDK5新版RMI编程指南

      在JDK5之前,使用RMI是一项相对复杂的工作,涉及到多个步骤,包括定义远程接口、编写服务端和客户端代码、生成Stub和Skeleton等。这些繁琐的操作使得许多开发者转而寻求其他解决方案,如使用EJB作为一种对RMI的封装...

      java jdk21源码

      Java JDK21源码分析 Java Development Kit (JDK) 是Java编程语言的核心组件,它包含了一套完整的开发工具和运行环境。JDK21是其特定版本,提供了许多关键功能和改进。以下是对JDK21源码中部分关键模块的详细解析: ...

      jdk10的源码src文件

      源码分析可以帮助我们理解FXML是如何与Java代码交互,以及如何动态加载和控制UI元素的。 `java.xml.bind`模块是Java Architecture for XML Binding(JAXB)的一部分,它实现了将Java对象和XML数据之间的自动转换。...

      一个相当经典的RMI实例源代码及详细说明

      - **基本类型和已序列化的类**:在RMI中,可以直接使用基本类型和JDK中已实现序列化的类作为参数或返回值。 2. **定义远端接口**: - **继承Remote接口**:远端接口必须继承`java.rmi.Remote`,这是RMI的核心接口...

      jdk11.src.zip

      《深入解析JDK11源码》 JDK11是Java开发工具包的一个重要版本,它包含了丰富的功能和性能优化。"jdk11.src.zip"这个压缩包提供了JDK11的源代码,这对于开发者来说是一份极其宝贵的资源,能够帮助我们深入了解Java...

      RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序

      本篇将深入探讨如何利用JDK 1.5版本搭建一个基本的分布式Java RMI程序。RMI是Java在分布式计算领域的重要工具,它简化了网络应用的开发,使得开发者可以像操作本地对象一样操作远程对象。 首先,我们需要了解RMI的...

      java rmi HelloWorld版(源码)

      这个"java rmi HelloWorld版(源码)"的压缩包文件提供了一个简单的RMI应用示例,帮助开发者了解和学习RMI的基本原理和使用。 RMI的核心概念包括: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口...

      JAVA RMI测试代码

      本压缩包文件"rmi-code"包含了一个完整的RMI测试代码示例,适合在Linux和Windows平台上运行,帮助开发者理解和实践RMI的基本操作。 首先,我们需要了解RMI的核心概念: 1. **远程接口**:定义了远程对象需要暴露的...

      java jdk 1.6 src.zip 源码

      在Mac操作系统中,由于默认可能不包含这个源码文件,所以当开发者需要查看或分析Java标准库的源代码时,就需要手动添加`src.zip`。通过将这个压缩包解压并导入到IDE(如Eclipse或IntelliJ IDEA)中,开发者可以方便...

      Java RPC和RMI代码实战

      Java RPC和RMI代码实战,有关键注释,为最简案例。Maven搭建,JDK8编译。 RPC体验:依次运行RpcProvider和RpcConsumer类。 RMI体验:RMITest中依次运行testServer和testClient方法。

      java RMI 详解,实例加原理,想不理解都难

      Java Remote Method Invocation (RMI) 是Java平台提供的一种分布式计算技术,它允许在不同网络位置的Java对象之间进行远程调用。RMI是Java在分布式环境中实现对象间通信的重要手段,使得开发者可以像操作本地对象...

      jdk15的源码src文件

      标题“jdk15的源码src文件”表明我们要讨论的是Java Development Kit(JDK)的第15个主要版本的源代码。源代码是编程的基础,它揭示了Java语言的核心实现,让我们可以深入理解其工作原理。JDK 15的发布日期为2020年8...

      RMI可运行的示例代码

      要运行这个示例,你需要确保Java环境已经配置好,包括设置JDK路径,启动RMI注册表,编译源代码,然后分别运行服务器和客户端程序。通过调试和分析这个示例,你可以更好地理解RMI的工作流程和实现细节。 总的来说,...

      RMI入门(二)实例 --- 亲自将代码调试成功

      在本文中,我们将深入探讨Java Remote Method Invocation (RMI)技术,通过一个具体的实例来学习如何设置、构建和调试RMI应用。RMI是Java提供的一种远程对象调用机制,它允许Java对象在不同的JVM之间进行通信。在这个...

      RMI会议管理系统代码

      《RMI会议管理系统代码解析与应用》 远程方法调用(Remote Method Invocation,RMI)是Java编程语言中实现分布式计算的一种技术。它允许Java对象在不同的Java虚拟机(JVM)之间进行通信,仿佛它们是在同一台机器上...

    Global site tag (gtag.js) - Google Analytics