java rmi 使用管道

这是一篇简短的博客文章,介绍使用Java RMI时应注意的两个常见陷阱。

设置java.rmi.server.hostname

如果您感到陌生,Connection拒绝托管: RMI客户端上的错误消息,并且您确定连接应该正常工作(您仔细检查了所有标准配置,例如网络配置等)。RMI系统属性java.rmi.server.hostname值得研究。

要在远程对象上调用方法,RMI客户端首先必须从RMI注册表中检索远程存根对象。 此存根对象包含服务器地址,该服务器地址稍后将在应调用远程方法时用于连接到远程对象(与RMI注册表的连接和与远程对象的连接是两个完全不同的东西)。 默认情况下,服务器将尝试检测自己的地址并将其传递给存根对象。 不幸的是,用于检测服务器地址的算法并不总是产生有用的结果(取决于网络配置)。

通过在RMI服务器上设置系统属性java.rmi.server.hostname,可以覆盖传递给存根对象的服务器地址。

这可以用Java代码完成

System.setProperty("java.rmi.server.hostname", "<<rmi server ip>>");

或添加Java命令行参数:

-Djava.rmi.server.hostname=<<rmi server ip>>

设置RMI服务端口

如果在通过防火墙进行RMI调用时遇到麻烦,则应确保为远程对象设置了特定的端口。 默认情况下,RMI注册表使用端口1099,因此请确保在防火墙中打开了此端口。 但是,此端口仅由客户端用于连接到RMI注册表,而不用于存根和远程对象之间的通信。 对于后面的一个,默认情况下使用随机端口。 由于您不想打开防火墙中的所有端口,因此应为RMI远程对象设置特定的端口。

这可以通过重写RMISocketFactory的createServerSocket()方法来完成:

public class MyRMISocketFactory extends RMISocketFactory {private static final int PREFERED_PORT = 1234;public ServerSocket createServerSocket(int port) throws IOException {if (port == 0) {return new ServerSocket(PREFERED_PORT);}return super.createServerSocket(port);}
}

默认情况下,如果将0作为参数传递,则createServerSocket()选择一个空闲的随机端口。 在createServerSocket()的此修改版本中,将0作为参数传递时,将返回特定端口(1234)。

如果您使用的是Spring的RmiServiceExporter,则可以使用setServicePort()方法在特定端口上导出服务:

<bean class="org.springframework.remoting.rmi.RmiServiceExporter"><property name="servicePort" value="1234"/>...
</bean>

请注意,多个远程对象/服务可以共享同一端口。 设置特定端口后,只需在防火墙中打开此端口。

参考:在mscharhag,Programming and Stuff博客上,我们的JCG合作伙伴 Michael Scharhag 使用Java RMI时要记住两件事 。

翻译自: https://www.javacodegeeks.com/2013/11/two-things-to-remember-when-using-java-rmi.html

java rmi 使用管道

java rmi 使用管道_使用Java RMI时要记住的两件事相关推荐

  1. 使用Java RMI时要记住的两件事

    这是一篇简短的博客文章,介绍使用Java RMI时应注意的两个常见陷阱. 设置java.rmi.server.hostname 如果您感到陌生,Connection拒绝托管: RMI客户端上的错误消息 ...

  2. 编程程序的名称要记住吗_学习编程时要记住的5件事

    编程程序的名称要记住吗 by Kurt 由库尔特 学习编程时要记住的5件事 (5 Things to Remember When You're Learning to Program) Learnin ...

  3. 用开源代码如何建立网站_建立开源社区时要考虑的6件事

    用开源代码如何建立网站 经常有人问我:"为什么决定将产品开源?" 在Kaltura ,我们之所以走开放源码之路,部分是由于好奇心和热情,部分是因为我们进入了一个竞争已经日趋激烈且显 ...

  4. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  5. java 程序增加 防盗_防盗Java EE –保护Java EE企业应用程序的安全

    java 程序增加 防盗 Øredev离我们仅有几天的路程,我受邀作了两次演讲. 其中之一是关于我最喜欢的主题:安全性和Java EE. 它旨在实现两个目标. 一方面向典型的Java EE开发人员介绍 ...

  6. java代码初体验_第一次Java 8体验

    java代码初体验 像世界其他地方一样,我深深地爱上了Slack. 为什么? 原因很多,但主要的原因是它提供了一种围绕通讯而非工具真正构建SDLC流程的新方法. 您认为这些天哪个更常见,杂乱无章的机智 ...

  7. java object转泛型_为什么Java的泛型要用擦除实现

    在 Java 中的 泛型 ,常常被称之为 伪泛型 ,究其原因是因为在实际代码的运行中,将实际类型参数的信息擦除掉了 (Type Erasure) .那是什么原因导致了 Java 做出这种妥协的呢?下面 ...

  8. java界面设计股票_利用JAVA实现股票交易系统设计参考.doc

    利用JAVA实现股票交易系统设计参考 目 录 摘要1 关键词1 Abstract2 Key words2 1 概述3 1.1 Java体系结构3 1.2 Java的优点3 1.3 Java的应用3 2 ...

  9. java启动mysq服务_启动java服务器

    Servlet Servlet担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层. Servlet是位于Web 服务器内部的服务器端的Java ...

最新文章

  1. 请正确使用return
  2. 【 Verilog HDL 】避免出现锁存器的组合电路描述方式
  3. Android的EditText自动获取焦点并弹出输入法问题
  4. 从5随机到7随机及其扩展
  5. Linux 系统审计操作行为的 5 种解决方案
  6. 这帮吃货程序猿,给阿里食堂来了一波骚操作
  7. 转载在linux下执行java窗口被锁定问题
  8. 2021年最值得推荐的七款可视化工具,人人都能学会使用
  9. AOJ0121 Seven Puzzle【BFS】
  10. Spark(Hive)对字符串数值的排序
  11. java学生信息管理系统
  12. Ansys命令流(按字母排列)
  13. cad命令栏怎么调出来_cad自动标注【搞定指南】
  14. 移动CMPP2.0封装
  15. 星空特效HTML代码,旋转的星空特效代码
  16. 如何更改itunes备份位置_Win10系统怎样设置itunes备份位置
  17. 一行代码实现随意编辑网页内容
  18. 【程序员的爱情】彼岸花开谁又种下了执念
  19. nginx events 模块配置
  20. 物质模拟器(游戏)1.0版本

热门文章

  1. 【树形DP】路径计数机(nowcoder 1103-B)
  2. 【树链剖分】Disruption P(luogu 4374)
  3. SpringCloud Greenwich(四)注册中心之eureka、Zuul和 gateway网关配置
  4. Spring Boot 热部署入门
  5. MyBatis-generator使用,Example缺少分页问题解决
  6. JavaFX图表(八)之堆积条形图
  7. 两步验证杀手锏:Java 接入 Google 身份验证器实战
  8. 在MySQL的InnoDB存储引擎中count(*)函数的优化
  9. JS 获取浏览器、显示器 窗体等宽度和高度
  10. Java多线程sleep和wait的区别,总结得非常好