У меня небольшая проблема с работой JBoss в разных сетях. В качестве краткого обзора у нас есть сеть разработки (которую я назову DEV) и клиентская сеть (скажем .. КЛИЕНТ!). Они связаны через брандмауэр. В сети Dev сервер известен как 192.168.100.50, в сети клиента он известен как 10.0.100.50. DNS в обеих сетях разрешает соответствующий IP с помощью DNS (sqlserver.dev.net).
sqlserver предоставляет 2 службы: одну через веб-службу .NET, другую - JBoss. При запуске клиента в сети DEV обе службы работают нормально. В сети КЛИЕНТА работает только служба .NET.
Клиент JBoss генерирует исключение UnknownHostException при попытке выполнить ContextLookup в следующем коде:
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);
}
Исключение составляет:
Исключением root является java.rmi.UnknownHostException: неизвестный хост: SQLserver
Я могу подтвердить, что проблема в том, что клиент пытается подключиться к «sqlserver» без имени домена. Это было проверено путем добавления 'sqlserver' в файл хоста клиента, и он отлично работает. Кроме того, написание SQLserver интересно, поскольку именно так хост Windows сообщает свое имя хоста, а не как он хранится в DNS. Мое лучшее предположение состоит в том, что, как только клиент установит первоначальное соединение, JBoss скажет клиенту в будущем подключиться к «SQLserver», который клиент не может решить.
Я уже пытался установить следующие системные свойства для полного доменного имени sqlserver:
jgroups.bind_addr
bind.address
java.rmi.server.hostname
У кого-нибудь есть идеи?