2009-06-24 120 views
3

我寫一個小工具,JMS消息發送到遠程服務器,但我無法正確配置的InitialContext(或者看起來是這樣)將消息發送到遠程JMS主題

代碼初始化上下文:

 Properties p = new Properties(); 
     p.put(Context.INITIAL_CONTEXT_FACTORY, 
      "org.jnp.interfaces.NamingContextFactory"); 
     p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); 
     p.put(Context.PROVIDER_URL, "jnp://10.10.10.10:1099/"); 
     Context context = new InitialContext(p); 

但是當我運行它,我得到一個異常:

javax.naming.CommunicationException 
[Root exception is java.rmi.ConnectException: 
Connection refused to host: 127.0.0.1; 
nested exception is: 
java.net.ConnectException: Connection refused: connect] 

所以令我莫名其妙的是,我正在抱怨127.0.0.1事件,儘管我爲10.10.10.10進行了配置,它是活着的,運行jboss,沒有防火牆,我可以得到一個telnet會話到端口1099,所以它似乎沒問題

任何指針?或助手?

回答

4

這是因爲JNDI和相關協議本質上是連接回來的,隨後的請求將轉到服務器應該監聽的IP上。如果您telnet到10.10.10.10:1099,並期待在輸出,你會看到這樣的事情:

telnet 10.10.10.10 1099 
[Connection message] 
[Garbage] 
127.0.0.1.... 

的原因是,你的服務器上127.0.0.1「服務」,並將與回覆該地址作爲JNDI位置。由於您(很有可能)在遠程計算機上,當您的遠程計算機嘗試連接到Jboss服務器通知它連接到的IP(127.0.0.1)時,它會嘗試連接到自己,而不是連接到JBoss服務器。

您需要可以啓動JBoss有:./run.sh -b 0.0.0.0(所有IP綁定),或在機器上的localhost條目更改爲10.10.10.10

(順便說一句,我記得掙扎與這一年齡段,並知道它是多麼令人沮喪)

+0

這看起來很有前途:)肯定會嘗試明天早上,並報告回 – webclimber 2009-06-24 02:47:30