【发布时间】:2009-05-08 15:10:43
【问题描述】:
我在让 JBoss 跨网络工作时遇到了一点问题。作为快速概述,我们有一个开发网络(我将其称为 DEV)和一个客户端网络(比如说.. CLIENT!)。这些通过防火墙连接。在 Dev 网络中,服务器称为 192.168.100.50,在客户端网络中称为 10.0.100.50。两个网络中的 DNS 通过 DNS (sqlserver.dev.net) 解析相关 IP。
sqlserver 提供两种服务,一种通过 .NET Web 服务,另一种通过 JBoss。在 DEV 网络上运行客户端时,两种服务都可以正常工作。在 CLIENT 网络上时,只有 .NET 服务有效。
JBoss 客户端尝试在以下代码中执行 ContextLookup 时抛出 UnknownHostException:
Properties p = new Properties();
p.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
p.put("java.naming.factory.url.pkgs", "=org.jboss.naming:org.jboss.jnp.interfaces");
p.put("java.naming.provider.url", "sqlserver.dev.net:1199");
try {
Context c = new InitialContext(p);
cm = (ServiceRemote)c.lookup(Service.RemoteJNDIName);
} catch (NamingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
例外是:
根异常是 java.rmi.UnknownHostException: Unknown host: SQLserver
我可以确认问题在于客户端尝试连接到没有域名的“sqlserver”。这已经通过将“sqlserver”添加到客户端的主机文件中进行了测试,并且工作正常。此外,“SQLserver”的拼写很有趣,因为这是 Windows 主机报告它的主机名的方式,而不是它在 DNS 中的存储方式。我最好的猜测是,一旦客户端建立初始连接,JBoss 会告诉客户端将来连接到“SQLserver”,客户端无法解决。
我已经尝试将以下系统属性设置为 sqlserver 的 FQDN:
jgroups.bind_addr
绑定地址
java.rmi.server.hostname
有人有什么想法吗?
【问题讨论】: