2011-09-13 7 views
3

JMS를 수행하는 Java 응용 프로그램이 있습니다. &이 작업을 수신합니다. 그러나 나는 재미있는 문제를 발견했다. 예를 들어 java.naming.provider.url에 대해 다음을 설정합니다.Tibco JMS 서버에 연결할 수 없습니다.

tcp://hostnameA.foo.bar:7222 

하지만 아래 오류가 있습니다. 정규화 된 도메인 이름이 아닌 호스트 이름 만 포함합니다.

javax.jms.JMSException: Failed to connect to the server at tcp://hostnameA:7222 

호스트 파일에 hostnameA를 수동으로 추가하지 않으면 Tibco 서버에 연결되지 않습니다.

어떻게 해결할 수 있습니까?

미리 감사드립니다.

답변

1

프로그래밍 레이어와는 아무런 관련이 없습니다.
해당 이름에 대한 DNS 쿼리를 해석 할 수 없으므로 hosts 파일을 편집 할 때 작동합니다.
시스템의 DNS 설정을 확인하거나 시스템 구성에있는 DNS 서버가 이름 쿼리에 응답하는지 확인하거나 대신 IP 주소를 사용하십시오.

+0

당신 말이 맞습니다. 99 %는 DNS 문제라는 것을 알고 있습니다. 그러나이 문제의 원인을 정확히 알고 싶습니다. :) – Smartmarkey

+0

DNS 서버가 내장 된 MS DC 환경이있는 경우 클라이언트가 해당 A 및 PTR 항목도 업데이트하는 옵션이 있습니다. 특정 시간이 지나면 만료됩니다. 즉, 그들은 삭제되고 더 이상 해결할 수 없다는 의미입니다. 이는 수동 입력에도 적용될 수 있습니다. – unNamed

9

EMS 서버에는 자체의 내장 JNDI 서버가 있습니다. 연결시 실제 수행중인 작업은 1) EMS에 쿼리합니다. ■ 연결 팩토리 정의에 JNDI 서버를 지정하고 2) 반환 된 팩토리를 기반으로 연결을 생성합니다. 이것은 java.naming.provider.url을 사용한다는 사실에 의해 암시됩니다.

사용중인 연결 팩토리의 EMS 서버에서 연결 팩토리 정의 (factories.conf)를 변경하십시오. 새로 설치하는 경우 기본 팩토리 (예 : QueueConnectionFactory)의 기본 정의는 "tcp : // 7222"이며 검색시 서버가 "tcp : // hostname : 7222"로 대체합니다. 이 정의를 예 : "tcp : //hostname.myfqdn.com : 7222"그리고 모든 것이 작동해야합니다.

직접 연결을 생성하여 JNDI 서버를 완전히 무시할 수도 있지만 서버에서 반환 한 연결 팩토리 정의에로드 균형 조정 및 내결함성 쌍, SSL 설정 또는 지점에 대한 정보가 포함될 수 있기 때문에 권장하지 않습니다. 완전히 다른 서버 쌍 등에 연결될 수 있습니다. 또한 EMS 관리자는 클라이언트가 코드 또는 구성을 변경하지 않고도 연결 팩토리의 정의를 변경할 수 있습니다.

관련 문제