java rmi 使用管道_使用Java RMI时要记住的两件事
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>
请注意,多个远程对象/服务可以共享同一端口。 设置特定端口后,只需在防火墙中打开此端口。
翻译自: https://www.javacodegeeks.com/2013/11/two-things-to-remember-when-using-java-rmi.html
java rmi 使用管道
java rmi 使用管道_使用Java RMI时要记住的两件事相关推荐
- 使用Java RMI时要记住的两件事
这是一篇简短的博客文章,介绍使用Java RMI时应注意的两个常见陷阱. 设置java.rmi.server.hostname 如果您感到陌生,Connection拒绝托管: RMI客户端上的错误消息 ...
- 编程程序的名称要记住吗_学习编程时要记住的5件事
编程程序的名称要记住吗 by Kurt 由库尔特 学习编程时要记住的5件事 (5 Things to Remember When You're Learning to Program) Learnin ...
- 用开源代码如何建立网站_建立开源社区时要考虑的6件事
用开源代码如何建立网站 经常有人问我:"为什么决定将产品开源?" 在Kaltura ,我们之所以走开放源码之路,部分是由于好奇心和热情,部分是因为我们进入了一个竞争已经日趋激烈且显 ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java 程序增加 防盗_防盗Java EE –保护Java EE企业应用程序的安全
java 程序增加 防盗 Øredev离我们仅有几天的路程,我受邀作了两次演讲. 其中之一是关于我最喜欢的主题:安全性和Java EE. 它旨在实现两个目标. 一方面向典型的Java EE开发人员介绍 ...
- java代码初体验_第一次Java 8体验
java代码初体验 像世界其他地方一样,我深深地爱上了Slack. 为什么? 原因很多,但主要的原因是它提供了一种围绕通讯而非工具真正构建SDLC流程的新方法. 您认为这些天哪个更常见,杂乱无章的机智 ...
- java object转泛型_为什么Java的泛型要用擦除实现
在 Java 中的 泛型 ,常常被称之为 伪泛型 ,究其原因是因为在实际代码的运行中,将实际类型参数的信息擦除掉了 (Type Erasure) .那是什么原因导致了 Java 做出这种妥协的呢?下面 ...
- java界面设计股票_利用JAVA实现股票交易系统设计参考.doc
利用JAVA实现股票交易系统设计参考 目 录 摘要1 关键词1 Abstract2 Key words2 1 概述3 1.1 Java体系结构3 1.2 Java的优点3 1.3 Java的应用3 2 ...
- java启动mysq服务_启动java服务器
Servlet Servlet担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层. Servlet是位于Web 服务器内部的服务器端的Java ...
最新文章
- 请正确使用return
- 【 Verilog HDL 】避免出现锁存器的组合电路描述方式
- Android的EditText自动获取焦点并弹出输入法问题
- 从5随机到7随机及其扩展
- Linux 系统审计操作行为的 5 种解决方案
- 这帮吃货程序猿,给阿里食堂来了一波骚操作
- 转载在linux下执行java窗口被锁定问题
- 2021年最值得推荐的七款可视化工具,人人都能学会使用
- AOJ0121 Seven Puzzle【BFS】
- Spark(Hive)对字符串数值的排序
- java学生信息管理系统
- Ansys命令流(按字母排列)
- cad命令栏怎么调出来_cad自动标注【搞定指南】
- 移动CMPP2.0封装
- 星空特效HTML代码,旋转的星空特效代码
- 如何更改itunes备份位置_Win10系统怎样设置itunes备份位置
- 一行代码实现随意编辑网页内容
- 【程序员的爱情】彼岸花开谁又种下了执念
- nginx events 模块配置
- 物质模拟器(游戏)1.0版本
热门文章
- 【树形DP】路径计数机(nowcoder 1103-B)
- 【树链剖分】Disruption P(luogu 4374)
- SpringCloud Greenwich(四)注册中心之eureka、Zuul和 gateway网关配置
- Spring Boot 热部署入门
- MyBatis-generator使用,Example缺少分页问题解决
- JavaFX图表(八)之堆积条形图
- 两步验证杀手锏:Java 接入 Google 身份验证器实战
- 在MySQL的InnoDB存储引擎中count(*)函数的优化
- JS 获取浏览器、显示器 窗体等宽度和高度
- Java多线程sleep和wait的区别,总结得非常好