2010-01-21 50 views
0

我有一組參數需要用來訪問JMS隊列。基本的JMS查詢

任何人都可以提供一個基本的例子,說明如何使用這些參數將XML塊發送到等待服務器。對於這個初始版本,我不介意對這些參數進行硬編碼。

我目前正在此:

Context ctx = new InitialContext(); 
QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) ctx.lookup("QueueConnectionFactory"); 
Queue queue = (Queue) ctx.lookup("OCP.GET.PRODUCTS.COMSRV"); 
QueueConnection queueConnection = queueConnectionFactory.createQueueConnection(); 
QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); 
QueueSender queueSender = queueSession.createSender(queue); 
TextMessage message = queueSession.createTextMessage(); 
message.setText(xmlString); 

但我不知道如何設置參數主機,端口的QueueManager或通道

提供給我的參數是

  • 管理人:OCP.QMGR
  • 頻道:OCP.SVRCONN
  • 端口:14234
  • 主持人:host.server.com
  • sentToQueue:OCP.GET.PRODUCTS.COMSRV
  • replyToQueue:COMSRV.GET.PRODUCTS.OCP

我很新到Java和JMS,並開始淹沒與此。

+0

什麼是監聽主機:端口?你的JMS提供商是什麼?你在使用MQ系列嗎? – 2010-01-21 10:58:36

+0

我被告知我應該使用javax.jms ...有幫助嗎? – Xetius 2010-01-21 11:41:04

+0

不,至少不是我(因爲你提到的概念不是JMS的一部分)。 – 2010-01-21 11:59:06

回答

4

我的理解是,您正嘗試連接到MQSeries(QueueManager和Channel是MQ概念,不屬於JMS API AFAIK),所以我認爲您必須使用MQ特定的客戶端API。我真的不是一個MQ專家,但似乎以下(見Implementing vendor-independent JMS solutions)的代碼是接近你所尋找的:

MQQueueConnectionFactory qconFactory = new MQQueueConnectionFactory(); 
qconFactory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP); //Used when the MQSeries server is on a different host from the client 
qconFactory.setQueueManager(queueManager); 
qconFactory.setHostName(hostName); 
qconFactory.setPort(port); 
qconFactory.setChannel(channel); 
connection = qconFactory.createQueueConnection(); 
session1 = connection.createQueueSession(true, Session.CLIENT_ACKNOWLEDGE);..... 

正如我所說的,我不是一個MQ專家,但MQQueueConnectionFactory似乎要了解你正在談論的大部分事情。


側面說明:

使用JNDI,你需要建立像初始上下文工廠提供商URL JNDI環境屬性。基本上,這些屬性用於聲明創建初始上下文以及在哪裏找到JNDI服務器的類。顯然,這些屬性的值取決於您要連接的JNDI服務。

您可以通過使用非空InitialContext constructor並將environment參數傳遞給它來指定環境屬性。例如連接到BEA WebLogic JNDI服務:

Properties p = new Properties(); 
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); 
p.put(Context.PROVIDER_URL,"t3://myhost:7001"); 
ctx = new InitialContext(p); 

或者你可以提供一個jndi.properties文件,並使用無參InitialContext constructor。例如,要連接到的IBM WebSphere JNDI服務,你會放一個jndi.properties文件,在類路徑中包含以下內容:

java.naming.provider.url=iiop://myhost:9001 
java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory 

第二種方法當然是更便攜,你做的不硬編碼值Java代碼中的參數(儘管這可能不是問題)。因爲你沒有提供關於你的上下文的任何細節(比如應用服務器或者JMS提供者或者你的上下文),所以我不能告訴你是否需要這個(甚至更少使用什麼值)您嘗試連接的消息傳遞解決方案)。

+0

非常好的答案,你解釋了兩種方法。可能希望添加運行,因爲瘦客戶機將需要您提到的JNDI設置,以及來自供應商的支持JAR。 – Robin 2010-01-21 14:09:43