ventajas que objetivo logo caracteristicas java freebsd opensolaris

java - objetivo - solaris que es



InetAddress.getLocalHost() arroja UnknownHostException (9)

Estoy probando nuestra aplicación de servidor (Java escrito) en diferentes sistemas operativos y pensé que OpenSolaris (2008.11) sería el menos problemático debido a la agradable integración de Java. Resulta que estaba equivocado, ya que termino con UnknownHostException

try { computerName = InetAddress.getLocalHost().getHostName(); if (computerName.indexOf(".") > -1) computerName = computerName.substring(0, computerName.indexOf(".")).toUpperCase(); } catch (UnknownHostException e) { e.printStackTrace(); }

El resultado es:

java.net.UnknownHostException: desvearth01: desvearth01 at java.net.InetAddress.getLocalHost(InetAddress.java:1353)

Sin embargo, nslookup desvearth01 devuelve la dirección IP correcta, y nslookup localhost devuelve 127.0.0.1 como se esperaba. Además, el mismo código funciona perfectamente en FreeBSD. ¿Hay algo especial para OpenSolaris del que no tenga conocimiento?

Cualquier pista apreciada, gracias.


Checkout / etc / hostname luego ponga su nombre de host en el archivo hosts.


En buena tradición, puedo responder mi propia pregunta una vez más:

Parece que InetAddress.getLocalHost() ignora /etc/resolv.conf, pero solo mira el archivo / etc / hosts (donde no había especificado nada además de localhost). Agregar la IP y el nombre de host a este archivo resuelve el problema y la excepción ya no existe.

La respuesta anterior es casi correcta y recibí sugerencias desde arriba y mi problema se resuelve ... Gracias.

Pero para mejorar esto, estoy agregando cambios paso a paso, para que sea útil incluso para usuarios ingenuos.

Pasos:

  • Abra / etc / hosts, las entradas pueden verse a continuación.

    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

  • necesita agregar una línea más arriba de esto por cualquier editor como vi o gedit. <your-machine-ip> <your-machine-name> localhost ej.

    192.168.1.73 my_foo localhost

Ahora, el archivo general puede verse así:

192.168.1.73 my_foo localhost 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

  • Solo guárdalo y ejecuta nuevamente tu código java ... tu trabajo está hecho.

En mi instancia de Amazon estaba teniendo el mismo problema, había un problema de configuración de DNS predeterminado. Entonces, para solucionar el problema, hice estos pasos:

obtener su nombre de host

$hostname ip-10-122-16-169

ping al nombre de host

$ping ip-10-122-16-169 ping: unknown host ip-10-122-16-169

cat / etc / hosts , obtendrás algo así como

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost6 localhost6.localdomain6

ahora solo necesitas agregar tu nombre de host al final de la primera línea, así que cuando lo anexes se verá como

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ip-10-122-16-169 ::1 localhost6 localhost6.localdomain6

ahora está listo para ir, para verificar nuevamente el mismo nombre de host

$ping ip-10-122-16-169 PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=255 time=0.018 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=255 time=0.024 ms


Este error aparece cuando cambié el nombre de la estación de trabajo e intenté iniciar Glassfish 2. También debe cambiar el nombre de la entrada en / etc / hosts, algo como esto:

127.0.0.1 localhost 127.0.1.1 MyNewName


Las búsquedas de host en Solaris usan /etc/nsswitch.conf modo que, dependiendo de lo que /etc/nsswitch.conf la línea ''hosts:'', determina si se debe consultar /etc/hosts , NIS, DNS y / o LDAP.

Si solo usa hosts y DNS, debe tener esto en /etc/nsswitch.conf :

hosts: files dns

La razón por la cual nslookup desvearth01 funciona es porque el comando nslookup consulta directamente /etc/resolv.conf . Si desea hacer una mejor prueba de línea de comando, use el comando:

getent hosts desvearth01



Si ve este mensaje, necesita configurar el nombre de host WITH hostname superhost.domain COMMAND !

Después de esto, verifique qué /etc/hosts contiene cadenas como esta 127.0.0.1 localhost .

Además, verifique que el comando uname -a devuelva algo como esto:

Linux superhost.domain 2.6.38-8-server # 42-Ubuntu SMP Lun Abr 11 03:49:04 UTC 2011 x86_64 x86_64 x86_64 GNU / Linux

¡¡¡¡ASÍ NO!!!!

Linux (ninguno) 2.6.38-8-server # 42-Ubuntu SMP Lun Abr 11 03:49:04 UTC 2011 x86_64 x86_64 x86_64 GNU / Linux


También estoy teniendo problemas con esto. Necesito hacer más pruebas, pero parece que NetworkInterface.getNetworkInterfaces() puede ser más confiable. Creo que esto no hace la búsqueda, sino que simplemente capta la IP.

Lo estoy usando como el "siguiente mejor" cuando falla getLocalHost() .


Uso NetworkInterface.getNetworkInterfaces() como un retroceso para cuando InetAddress.getLocalHost() arroja una UnknownHostException . Aquí está el código (sin manejo de excepción para mayor claridad).

Enumeration<NetworkInterface> iterNetwork; Enumeration<InetAddress> iterAddress; NetworkInterface network; InetAddress address; iterNetwork = NetworkInterface.getNetworkInterfaces(); while (iterNetwork.hasMoreElements()) { network = iterNetwork.nextElement(); if (!network.isUp()) continue; if (network.isLoopback()) // If I want loopback, I would use "localhost" or "127.0.0.1". continue; iterAddress = network.getInetAddresses(); while (iterAddress.hasMoreElements()) { address = iterAddress.nextElement(); if (address.isAnyLocalAddress()) continue; if (address.isLoopbackAddress()) continue; if (address.isMulticastAddress()) continue; return(address.getHostAddress()); } }