JBoss 에서 네이밍 서비스를 이용하기 위해서 InitialContext 객체를 그냥 생성하게 되면 아래와 같은 오류를 접하게 됩니다.
javax.naming.CommunicationException: Could not obtain connection to any of these urls: vm://localhost 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 vm:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server vm:1099 [Root exception is java.net.UnknownHostException: vm]]
JBoss 에서는 InitialContext 생성 시에 "java.naming.provider.url" 기본 값이 "vm:localhost:1099" 로 설정이 되어있어, vm 프로토콜을 찾지 못하고 처리를 재대로 못하게 되는 것입니다.
다음과 같은 프로퍼티 설정으로 오류를 해결할 수 있습니다.
기존 소스
InitialContext context = new InitialContext();
변경된 소스
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
properties.put(Context.PROVIDER_URL, "jnp://localhost:1099");
InitialContext context = new InitialContext(properties);
~