基本JMS查询

时间:2010-01-21 10:36:33

标签: java 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);

但我不知道如何设置Host,Port,QueueManager或Channel

的参数

提供给我的参数是

  • 经理:OCP.QMGR
  • 频道:OCP.SVRCONN
  • 港口:14234
  • 主持人:host.server.com
  • sentToQueue:OCP.GET.PRODUCTS.COMSRV
  • replyToQueue:COMSRV.GET.PRODUCTS.OCP

我是Java和JMS的新手,我开始淹没这个。

1 个答案:

答案 0 :(得分: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时,需要设置JNDI环境属性,如初始上下文工厂提供者URL 。基本上,这些属性用于声明用于创建初始上下文的类以及在何处查找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文件并使用非arg 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提供程序或消息传递)您尝试连接的解决方案)。