異なるネットワーク上にある場合のJBoss UnknownHostException
質問
JBossをネットワーク間で動作させるのに少し問題があります。簡単な概要として、開発ネットワーク(これをDEVと呼びます)とクライアントネットワーク(たとえば.CLIENT!)があります。これらはファイアウォールを介して接続されます。 Devネットワークでは、サーバーは192.168.100.50、クライアントネットワークでは10.0.100.50として知られています。両方のネットワークのDNSは、DNS(sqlserver.dev.net)によって関連するIPを解決します。
sqlserverは2つのサービスを提供します。1つは.NET Webサービス経由で、もう1つは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:Unknown host:SQLserver
です。
問題は、クライアントがドメイン名なしで「sqlserver」に接続しようとしていることであることを確認できます。これは、クライアントのホストファイルに「sqlserver」を追加することでテストされており、正常に機能します。さらに、「SQLserver」のスペルは興味深いものです。これは、WindowsホストがDNSに保存される方法ではなく、ホスト名を報告する方法だからです。クライアントが最初の接続を確立すると、JBossはクライアントに将来「SQLserver」に接続するように指示しますが、クライアントはそれを解決できません。
次のシステムプロパティをsqlserverのFQDNに設定しようとしました:
jgroups.bind_addr
bind.address
java.rmi.server.hostname
アイデアはありますか?
解決
わかりました。起動時に0.0.0.0にバインドすると、実際には自己識別が台無しになります。 sqlserver.dev.net(run.bat -b sqlserver.dev.net)へのバインドで修正されました。
他のヒント
プロキシサーバーを持つネットワークである場合、プロパティでプロキシサーバーのIPとプロキシのポートを指定する必要があります。