如何使用ActiveMQ添加JNDI目标(主题和队列)?



我不想使用jdni.properties文件,所以为了向我的JNDI设置添加新属性,我写了以下内容:

Hashtable<String, Object> jndi_env = new Hashtable<String, Object>();
jndi_env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
jndi_env.put("connectionFactory.ConnectionFactory","vm://0");
jndi_env.put("topic.example","example");

我的问题是,当我调用这个类时:

initialContext = new InitialContext(jndi_env);

由于我在最后一行传递了一个 name 参数,因此查找了 URL 上下文工厂。

这使我的代码寻找我实际上不想要的tcp://localhost:61616连接。

我看到有

QueueConnectionFactory: org.apache.activemq.ActiveMQConnectionFactory
example: org.apache.activemq.command.ActiveMQTopic
XAConnectionFactory: org.apache.activemq.ActiveMQXAConnectionFactory

我不想要,或者至少不是他们的类型。

如果我不使用我的jndi.properties文件传递参数进行检查,而我没有遇到建立tcp连接的问题,那么我发现只有:

ConnectionFactory: org.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory
queue: org.apache.activemq.artemis.jndi.ReadOnlyContext
queue/exampleQueue: org.apache.activemq.artemis.jms.client.ActiveMQQueue
dynamicTopics: org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory$2
dynamicQueues: org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory$1

那么我如何更改我添加jndi_env.put("topic.example","example");的对象类型,使其如下所示(但当然对于主题(

queue: org.apache.activemq.artemis.jndi.ReadOnlyContext
queue/exampleQueue: org.apache.activemq.artemis.jms.client.ActiveMQQueue

当你创建你的InitialContext你传递了错误的工厂。目前您正在通过org.apache.activemq.jndi.ActiveMQInitialContextFactory.这是ActiveMQ 5.x的工厂,而不是Artemis。您需要传入org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory,例如:

Hashtable<String, Object> jndi_env = new Hashtable<String, Object>();
jndi_env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory");
jndi_env.put("connectionFactory.ConnectionFactory","vm://0");
jndi_env.put("topic.example","example");

相关内容

  • 没有找到相关文章

最新更新