网站建设报价表,个人网站备案的好处,个人备案的网站可以做什么,wordpress 图片 说明 居中这是一篇简短的博客文章#xff0c;介绍使用Java RMI时应注意的两个常见陷阱。 设置java.rmi.server.hostname 如果您感到陌生#xff0c;Connection拒绝托管#xff1a; RMI客户端上的错误消息#xff0c;并且您确定连接应该正常工作#xff08;您仔细检查了所有标准配置… 这是一篇简短的博客文章介绍使用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.hostnamermi 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 classorg.springframework.remoting.rmi.RmiServiceExporterproperty nameservicePort value1234/...
/bean 请注意多个远程对象/服务可以共享同一端口。 设置特定端口后只需在防火墙中打开此端口。 参考 mscharhag编程和Stuff博客中的JCG合作伙伴 Michael Scharhag 使用Java RMI时要记住两点 。 翻译自: https://www.javacodegeeks.com/2013/11/two-things-to-remember-when-using-java-rmi.html