2011-09-13 317 views
3

我有一個java應用程序,它執行一些JMS發送&接收工作。但是我發現了一個有趣的問題。例如,我爲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查詢無法解析,這就是您編輯主機文件時工作的原因。
請檢查您系統的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://主機名:7222」。您可以將此定義更改爲「tcp://hostname.myfqdn.com:7222」,事情應該工作。

您也可以通過直接創建連接完全繞過JNDI服務器,但我不會推薦這樣做,因爲服務器返回的連接工廠定義可能包含有關負載均衡和容錯對,SSL設置或點的信息到完全不同的服務器對等等。它還允許EMS管理員更改連接工廠的定義,而無需客戶端更改他們的代碼甚至他們的配置。