java - 带有 InitialDirContext 的 Tomcat 7 中的 ActiveMQ 5.10 客户端

标签 java tomcat activemq jndi

我正在使用现有的 Web 应用程序(在 Tomcat 7.0.26 中运行),该应用程序通常通过 JMS API 通过 IBM WebsphereMQ 与外部系统通信。代码类似于:

Hashtable<String, String> env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory);
env.put(Context.PROVIDER_URL, providerURL);

// Note that this is instantiating an InitialDirContext,
// NOT an InitialContext!!!
Context context = new InitialDirContext(environment);

qcf = (QueueConnectionFactory)context.lookup(qcfName);
requestQueue = (Queue)context.lookup(requestQueueName);
responseQueue = (Queue)context.lookup(responseQueueName);

//... etc, usual type of JMS code

我现在正在尝试使用 ActiveMQ 5.10 客户端库进行这项工作。我的限制是我不能修改源代码。我唯一要玩的是上面代码中所示的变量:

  • initialContextFactory 在当前情况下始终设置为 com.sun.jndi.fscontext.RefFSContextFactory
  • providerURL 当前设置为 file://C:/directory URL,指向由 "生成的 .bindings 文件WebsphereMQ Explorer 中的托管 JMS 对象
  • requestQueueName & responseQueueName

我现在正在将 initialContextFactory 更改为 org.apache.activemq.jndi.ActiveMQInitialContextFactory,将 providerURL 更改为 tcp://localhost:61616。虽然我没有从代码中得到任何错误,但它不起作用。我在 ActiveMQ Web 管理控制台中看不到任何连接。

在网络上进行研究,我看到通常 ActiveMQ JNDI 与 Tomcat 的设置不同:

  • Resource context.xml 中的条目
  • 将 InitialContext 创建为 new InitialContext();
  • 获取“子上下文”作为 envContext = (Context) initCtx.lookup("java:comp/env");
  • 从此子上下文中获取 JMS 对象(使用“jms/”前缀)

但正如我之前所写,这对我来说不是一个选择:虽然我可以访问代码,但我不能修改它。

有人知道解决这个问题的方法吗?我如何从 InitialDirContext 的实例中获取 ActiveMQ QueueConnectionFactory/Queue 对象,仅使用 INITIAL_CONTEXT_FACTORY 和 PROVIDER_URL 进行初始化,并且大概没有在 Tomcat 端进行任何其他配置(尽管如有必要,我确实可以选择更改tomcat 配置也是如此)。

马丁

最佳答案

事实证明,我还需要将 geronimo-j2ee-management_1.1_spec-1.0.1.jar 包含到该应用程序的 CLASSPATH 中。如果没有这个,就会抛出一个没有记录在任何地方的异常,所以需要一些聪明才智来解决这个问题。

马丁

关于java - 带有 InitialDirContext 的 Tomcat 7 中的 ActiveMQ 5.10 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731564/

相关文章:

java - 如何在 Twitter 中检查流式 API 中的速率限制

java - 如何缩短DSpace中显示的文件名

java - 无法从 EC2 访问 Tomcat

scala - 使用 Gatling 将消息发布到 ActiveMQ

java - JMS 自动确认消费者处理发生在 onMessage 中

java - 字符串数组和字符串

java - Server Tomcat v9.0 Server at localhost failed to start 是eclipse中的消息

java - 使用 Cargo 和 Maven 远程部署 WAR,无需 HOT 部署

activemq - 无法使用 Atomikos 配置涉及 ActiveMQ 和嵌入式 H2 的分布式事务

java - Struts2 无法检索用作操作类中的属性的包含对象