3

我在让 JBoss 跨网络工作时遇到了一些问题。作为快速概述,我们有一个开发网络(我将其称为 DEV)和一个客户端网络(例如.. CLIENT!)。这些通过防火墙连接。在 Dev 网络中,服务器称为 192.168.100.50,在客户端网络中称为 10.0.100.50。两个网络中的 DNS 通过 DNS (sqlserver.dev.net) 解析相关 IP。

sqlserver 提供 2 种服务,一种通过 .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:未知主机:SQLserver

我可以确认问题在于客户端正在尝试连接到没有域名的“sqlserver”。这已经通过将“sqlserver”添加到客户端的主机文件中进行了测试,并且工作正常。此外,“SQLserver”的拼写很有趣,因为这是 Windows 主机报告它的主机名的方式,而不是它在 DNS 中的存储方式。我最好的猜测是,一旦客户端建立初始连接,JBoss 会告诉客户端将来连接到“SQLserver”,客户端无法解决。

我已经尝试将以下系统属性设置为 sqlserver 的 FQDN:

jgroups.bind_addr
bind.address
java.rmi.server.hostname

有没有人有任何想法?

4

2 回答 2

6

好的,事实证明,在启动时绑定到 0.0.0.0 实际上会弄乱它的自我识别。绑定到 sqlserver.dev.net (run.bat -b sqlserver.dev.net) 修复了它。

于 2009-05-08T15:21:12.017 回答
0

可能是您的网络有代理服务器,您需要在属性检查中提供代理服务器 ip 和代理端口。

于 2009-08-11T05:06:56.117 回答