让JBoss跨网络工作时遇到了一些问题。作为一个快速概述,我们有一个开发网络(我称之为DEV)和一个客户端网络(比如说.. CLIENT!)。它们通过防火墙连接。在Dev网络中,服务器称为192.168.100.50,在客户端网络上称为10.0.100.50。两个网络中的DNS通过DNS解析相关IP(sqlserver.dev.net)。
sqlserver提供2个服务,一个通过.NET Web服务,另一个通过JBoss。在DEV网络上运行客户端时,两种服务都可以正常工作。在CLIENT网络上时,只有.NET服务可用。
在尝试执行以下代码中的ContextLookup时,JBoss客户端抛出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
有没有人有任何想法?
答案 0 :(得分:6)
好的,事实证明在启动时绑定到0.0.0.0实际上会弄乱它的自我识别。绑定到sqlserver.dev.net(run.bat -b sqlserver.dev.net)修复它。
答案 1 :(得分:0)
可能是您的网络有代理服务器,您需要在属性中提供代理服务器ip和代理端口检查。