[英]Remote JMS connection still using localhost
我在遠程glassfish服務器上創建了一個JMS連接工廠,並希望從我本地計算機上的Java客戶端應用程序中使用該服務器。 我有以下配置來獲取上下文和連接工廠:
Properties env = new Properties();
env.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
env.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
env.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
env.setProperty("org.omg.CORBA.ORBInitialHost", JMS_SERVER_NAME);
env.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
initialContext = new InitialContext(env);
TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) initialContext.lookup("jms/MyConnectionFactory");
topicConnection = topicConnectionFactory.createTopicConnection();
topicConnection.start();
這似乎工作,當我從glassfish服務器刪除ConnectionFactory時,我得到一個異常,表明無法按預期找到jms / MyConnectionFactory。
但是,當我隨后使用我的topicConnection
獲取主題時,它嘗試連接到localhost:7676(由於我沒有在本地運行glassfish,因此失敗)。
如果我動態創建主題:
TopicSession pubSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = pubSession.createTopic(topicName);
TopicPublisher publisher = pubSession.createPublisher(topic);
Message mapMessage = pubSession.createTextMessage(message);
publisher.publish(mapMessage);
並且glassfish服務器沒有在本地運行我得到了相同的連接拒絕但是,如果我啟動我的本地glassfish服務器,主題是在本地創建的,我可以在glassfish管理控制台中看到它們。
如果你問我在我的本地glassfish實例上沒有jms / MyConnectionFactory,它只能在遠程服務器上使用。
我無法看到我在這里做錯了什么以及它為什么要嘗試使用localhost。
有任何想法嗎?
干杯,
詹姆士
我在嘗試為EJB進行遠程JNDI查找時遇到了類似的問題。 問題是在我的/ etc / hosts文件中,機器名被映射到本地主機,例如:
127.0.0.1 glassfish localhost.localdomain localhost
要查找資源,需要建立兩個連接。 第一個是找到您應該查找的服務器的位置。 第二個使用此IP進行查找。 在您的情況下,第一個連接是返回localhost(127.0.0.1)。 您的應用程序嘗試連接到localhost進行查找,但不能,因為沒有本地運行的glassfish。 要解決此問題,請確保您的主機文件類似於:
127.0.0.1 localhost
192.168.1.10 glassfish //(or what ever your server name is).
你可以在這里找到更多。
您必須區分獲取ConnectionFactory對象及其打開的連接。 獲取ConnectionFactory對象由JNDI處理(在本例中由CORBA支持)。 獲得ConnectionFactory對象后,它將使用其imqAddressList參數打開與JMS代理的連接。 默認情況下,它配置為localhost:7676,如果要打開與遠程代理的連接,則必須配置正確的值。
您必須檢查如何為綁定到jms / MyConnectionFactory的TopicConnectionFactory配置此參數。 有關如何在Glassfish中配置連接工廠的更多詳細信息,請參閱管理JMS連接工廠和目標 。
我有一個類似的問題,從另一台機器獲取JMS資源,然后運行GlassFish的機器(在我的情況下為v3.0.1)。
為了讓它工作,我做了以下事情:
java -Dorg.omg.CORBA.ORBInitialHost=myServerHost
...)或通過代碼( System.setProperty("org.omg.CORBA.ORBInitialHost","myServerHost");
) 我需要的最后一個措施是因為在加載JMS資源時,一些內部類(com.sun.enterprise.naming.factory.AdministeredObjectFactory和其他人)創建了一個新的InitialContext而沒有考慮我提供的屬性。 新創建的InitialContext仍然是指localhost而不是myServerHost。
將屬性設置為JVM屬性是有效的,因為默認情況下InitialContext會考慮相關的JVM屬性集。 創建新InitialContext的任何(內部)組件將自動使用正確的設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.