尝试将消息推送到Activemq时获取NamingException

时间:2013-11-06 15:12:10

标签: java jms activemq jndi messaging

我试图将消息发布到activemq。但我在我的java应用程序中得到一个命名异常。这是代码如下

 Properties props = new Properties();
    props.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.apache.activemq.jndi.ActiveMQInitialContextFactory");
    props.setProperty(Context.PROVIDER_URL,"tcp://localhost:61616");
    InitialContext ctx = new InitialContext(props);
     // get the initial context
     // InitialContext ctx = new InitialContext();
     QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");        
     // create a queue connection
       QueueConnection queueConn = connFactory.createQueueConnection();                                                       
       // lookup the queue object
       Queue queue = (Queue) ctx.lookup("nixon");

我得到三个警告加上一个像这样的错误

 Exception in thread "main" javax.naming.NameNotFoundException: nixon
at org.apache.activemq.jndi.ReadOnlyContext.lookup(ReadOnlyContext.java:235)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.youtube.rest2.status.ProducerNewClient.main(ProducerNewClient.java:38)

任何人都可以告诉我为什么会收到这个错误..?

1 个答案:

答案 0 :(得分:4)

您很可能会收到此错误,因为您尚未在JNDI配置文件中配置目标。您可以将这些定义添加到文件中,也可以使用ActiveMQ的动态目标功能。

对于使用基于JNDI的程序进行最简单的配置,有两个动态上下文如下

dynamicQueues
dynamicTopics

允许您在没有任何配置的情况下使用JNDI查找队列和主题。

e.g。如果您使用以下名称查找JNDI dynamicQueues / FOO.BAR

您将获得名为“FOO.BAR”的ActiveMQQueue。

阅读ActiveMQ网站上的JNDI Documentation了解更多信息。