JAVA直接创造MQ连接与JNDI创建连接的区别
JAVA直接创建MQ连接与JNDI创建连接的区别1.直接使用应用程序创建。?[java]?view plaincopypublic?static?vo
JAVA直接创建MQ连接与JNDI创建连接的区别
1.直接使用应用程序创建。
?
[java]?view plaincopy
- public?static?void?main(String[]?args)?throws?JMSException?{??
- ????????String?uri?=?"tcp://tcp://localhost:61616";??
- ????????//?创建连接工厂。??
- ????????ConnectionFactory?connectionFactory?=?new?ActiveMQConnectionFactory(uri);??
- ??????????
- ????????//创建连接对象。??
- ????????Connection?connection?=?connectionFactory.createConnection();??
- ??????????
- ????????//创建Queue对象??
- ????????Destination?queue?=?new?ActiveMQQueue("Queue");??
- ??????????
- ????????//创建Topic对象??
- ????????Destination?topic?=?new?ActiveMQTopic("Topic");???????
- ????}??
?
2.Use Jndi 配置。
使用JNDI配置可以屏蔽具体的实现细节,可以不用修改代码就可以实现在不同消息中间消息件产品之间的切换。一般情况下,我们只要使用JMS规范中提及的那些接口就可以完成所有的编程。它们之间的关系如下:

本例介绍ActiveMQ提供的默认的JNDI的支持。
[xhtml]?view plaincopy
- java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory??
- java.naming.provider.url=tcp://localhost:61616??
- //username??
- java.naming.security.principal=??
- //password??
- java.naming.security.credentials=??
- ??
- connectionFactoryNames=con1,con2??
- queue.MyQueue=MyQueue??
- topic.MyTopic=MyTopic??
?
本例中,配置了两个连接工厂con1,con2,一个Queue对象MyQueue,一个Topic对象MyTopic。
?
[java]?view plaincopy
- import?java.io.IOException;??
- import?java.util.Properties;??
- ??
- import?javax.naming.Context;??
- import?javax.naming.InitialContext;??
- import?javax.naming.NamingException;??
- ??
- import?org.apache.log4j.Logger;??
- ??
- public?class?JndiFactory?{??
- ??????
- ????private?static?final?Logger?LOGGER?=?Logger.getLogger(JndiFactory.class);??
- ??????
- ????protected?Context?context?=?null;??
- ??????
- ????public?void?initalize()?throws?NamingException??
- ????{?????????
- ????????Properties?props?=?new?Properties();??
- ????????try{??
- ????????????props.load(this.getClass().getResourceAsStream("jndi.properties"));???
- ????????}catch(IOException?ex){??
- ????????????LOGGER.error("Can't?load?jndi.properties.",?ex);??
- ????????}??
- ????????context?=?new?InitialContext(props);??????????
- ????}??
- ??
- ????public?Context?getJndiContext()?throws?NamingException?{??
- ????????if(context?==?null){??
- ????????????initalize();??
- ????????}??
- ????????return?context;??
- ????}?????
- ??
- }??
?
?
使用JNDI拿到连接对象以及其他资源。
?
[java]?view plaincopy
- public?static?void?main(String[]?args)?throws?NamingException,?JMSException?{??
- ??????????
- ????????JndiFactory?factory?=?new?JndiFactory();??????????
- ??????????
- ????????Context?ctx?=?factory.getJndiContext();??
- ??????????
- ????????//获取连接工厂。??
- ????????ConnectionFactory?factory1?=?(ConnectionFactory)?ctx.lookup("con1");??
- ????????ConnectionFactory?factory2?=?(ConnectionFactory)?ctx.lookup("con2");??
- ??????????
- ????????//创建连接对象??
- ????????Connection?conn?=?factory1.createConnection();??
- ??????????
- ????????//获取Queue对象。??
- ????????Destination?queue?=?(Queue)?ctx.lookup("MyQueue");????????
- ??????????
- ????????//获取Topic对象。??
- ????????Destination?topic?=?(Topic)?ctx.lookup("MyTopic");??
- ??????????
- ????????System.out.println(conn);?????????????????
- ????????System.out.println(queue);????????
- ????????System.out.println(topic);??
- ??????????
- ????} ?
?