어느 WAS에서나 제목에서처럼 RMI/EJB 등의 lookup시 UnkownHostException이 발생할 수 있습니다.

Stacktrace:
javax.naming.InitialContext at b6ece5
log4j:WARN No appenders could be found for logger (org.jnp.interfaces.NamingContext).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" javax.naming.CommunicationException: Could not obtain connection to any of these urls: jboss-server:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to connect to server jboss-server:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server jboss-server:1099 [Root exception is java.net.UnknownHostException: jboss-server]]]
at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1416)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:596)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:589)
at javax.naming.InitialContext.lookup(Unknown Source)
at Main.main(Main.java:16)
Caused by: javax.naming.CommunicationException: Failed to connect to server jboss-server:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server jboss-server:1099 [Root exception is java.net.UnknownHostException: jboss-server]]
at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:269)
at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1387)
... 4 more
Caused by: javax.naming.ServiceUnavailableException: Failed to connect to server jboss-server:1099 [Root exception is java.net.UnknownHostException: jboss-server]
at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:243)
... 5 more

Caused by: java.net.UnknownHostException: jboss-server


문제는 특정 서버에 따라 시스템 프로퍼티에 접근하지 못해 startup 시점의 java.rmi.server.hostname프로퍼티를 시스템에 세팅하지 못하기 때문에 나타나는 현상이 발생합니다. 즉 서버의 플랫폼과 네트워크 환경에 따라서 서버가 실행중의 Java 가상 머신이 호스트 이름 정보를 이용할 수 없는 경우가 있습니다. 이 때 -D옵션을 이용하여 사용자 프로퍼티에 해당 설정을 반드시 켜줘야 정상적으로 구동됩니다.

JAVA_OPT=$JAVA_OPT -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx
$JAVA_HOME/bin/java $CLASSPATH $JAVA_OPT ~.Main

서두에 이야기한 것처럼 이것은 자바의 RMI 특성이기 때문에 어떤 애플리케이션에서도 발생할 수 있습니다.


 

크리에이티브 커먼즈 라이센스
Creative Commons License
2009/08/06 10:39 2009/08/06 10:39
http://www.javapattern.info/trackback/284