JAVA直接创建MQ连接与JNDI创建连接的区别

1.直接使用应用程序创建。

 

[java]  view plain copy
  1. public static void main(String[] args) throws JMSException {  
  2.         String uri = "tcp://tcp://localhost:61616";  
  3.         // 创建连接工厂。  
  4.         ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(uri);  
  5.           
  6.         //创建连接对象。  
  7.         Connection connection = connectionFactory.createConnection();  
  8.           
  9.         //创建Queue对象  
  10.         Destination queue = new ActiveMQQueue("Queue");  
  11.           
  12.         //创建Topic对象  
  13.         Destination topic = new ActiveMQTopic("Topic");       
  14.     }  

 

2.Use Jndi 配置。

使用JNDI配置可以屏蔽具体的实现细节,可以不用修改代码就可以实现在不同消息中间消息件产品之间的切换。一般情况下,我们只要使用JMS规范中提及的那些接口就可以完成所有的编程。它们之间的关系如下:

JMS

本例介绍ActiveMQ提供的默认的JNDI的支持。

[xhtml]  view plain copy
  1. java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory  
  2. java.naming.provider.url=tcp://localhost:61616  
  3. //username  
  4. java.naming.security.principal=  
  5. //password  
  6. java.naming.security.credentials=  
  7.   
  8. connectionFactoryNames=con1,con2  
  9. queue.MyQueue=MyQueue  
  10. topic.MyTopic=MyTopic  

 

本例中,配置了两个连接工厂con1,con2,一个Queue对象MyQueue,一个Topic对象MyTopic。

 

[java]  view plain copy
  1. import java.io.IOException;  
  2. import java.util.Properties;  
  3.   
  4. import javax.naming.Context;  
  5. import javax.naming.InitialContext;  
  6. import javax.naming.NamingException;  
  7.   
  8. import org.apache.log4j.Logger;  
  9.   
  10. public class JndiFactory {  
  11.       
  12.     private static final Logger LOGGER = Logger.getLogger(JndiFactory.class);  
  13.       
  14.     protected Context context = null;  
  15.       
  16.     public void initalize() throws NamingException  
  17.     {         
  18.         Properties props = new Properties();  
  19.         try{  
  20.             props.load(this.getClass().getResourceAsStream("jndi.properties"));   
  21.         }catch(IOException ex){  
  22.             LOGGER.error("Can't load jndi.properties.", ex);  
  23.         }  
  24.         context = new InitialContext(props);          
  25.     }  
  26.   
  27.     public Context getJndiContext() throws NamingException {  
  28.         if(context == null){  
  29.             initalize();  
  30.         }  
  31.         return context;  
  32.     }     
  33.   
  34. }  

 

 

使用JNDI拿到连接对象以及其他资源。

 

[java]  view plain copy
  1. public static void main(String[] args) throws NamingException, JMSException {  
  2.           
  3.         JndiFactory factory = new JndiFactory();          
  4.           
  5.         Context ctx = factory.getJndiContext();  
  6.           
  7.         //获取连接工厂。  
  8.         ConnectionFactory factory1 = (ConnectionFactory) ctx.lookup("con1");  
  9.         ConnectionFactory factory2 = (ConnectionFactory) ctx.lookup("con2");  
  10.           
  11.         //创建连接对象  
  12.         Connection conn = factory1.createConnection();  
  13.           
  14.         //获取Queue对象。  
  15.         Destination queue = (Queue) ctx.lookup("MyQueue");        
  16.           
  17.         //获取Topic对象。  
  18.         Destination topic = (Topic) ctx.lookup("MyTopic");  
  19.           
  20.         System.out.println(conn);                 
  21.         System.out.println(queue);        
  22.         System.out.println(topic);  
  23.           
  24.     }  

 

你可能感兴趣的:(java)