【问题标题】:Using ActiveMQ via JNDI通过 JNDI 使用 ActiveMQ
【发布时间】:2010-10-01 23:59:29
【问题描述】:

我正在尝试使用 JNDI 创建与 ActiveMQ 的简单连接。


我有
  1. 名为“example.A”的队列。

  2. 根据ActiveMQ documentation touching JNDI,如果我想通过 JNDI 使用连接工厂和队列(主题),我必须将 jndi.properties 文件放在我的类路径中。据我了解,activeMQ 类路径默认为 %activemq%/conf 目录。我没有改变它。 所以我的队列有这个属性:

    queue.MyQueue = example.A

  3. 我已经为 ActiveMQ 创建了 java 客户端类,它使用如下 JNDI:

        Properties jndiParameters = new Properties() ;
        jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
        jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616");
        Context context = new InitialContext(jndiParameters);
        ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
        Queue queue = (Queue) context.lookup("MyQueue");
    

但它找不到我的队列,它会抛出异常:javax.naming.NameNotFoundException: MyQueue

我的错误在哪里?

【问题讨论】:

  • 我有一个类似的问题,我可以配置 jndi url 和连接工厂但我不能提供额外的属性。这样看来队列端点没有定义。如果我使用动态队列/测试,它可以工作,但它是否也可以解决静态命名的目的地?

标签: java jndi activemq


【解决方案1】:

问题在于您明确地创建了属性并将它们传递给 InitialContext 构造函数。这意味着不会读取类路径上的 jndi.properties。

你的代码应该是这样的:

Context context = new InitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
Queue queue = (Queue) context.lookup("MyQueue");

【讨论】:

    【解决方案2】:

    您可以设置静态属性,也可以像这样从文件中检索它们:

        InputStream is = getClass().getResourceAsStream("/my.jndi.properties");
        Properties jndiParameters = new Properties();
        jndiParameters.load(is);
        jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
        jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616");
        Context ctx =  new InitialContext(jndiParameters);
    ...
    

    只要您在加载资源后设置静态道具,这就会起作用。例如,如果您从其他地方加载提供程序 url,这很有帮助。

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 2012-01-21
      • 2014-09-09
      • 2018-04-04
      • 1970-01-01
      相关资源
      最近更新 更多