java - JMS:activemq-version.properties 不可用

标签 java jms activemq wildfly wildfly-10

我正在尝试建立 JMS 连接。在connectionFactory.createContext中,我收到一个错误,ActiveMQ版本加载器报告缺少属性文件:

Caused by: java.lang.RuntimeException: activemq-version.properties is not available at org.apache.activemq.artemis.utils.VersionLoader.getVersion(VersionLoader.java:87)

我正在从 Eclipse 运行该项目 - 所以这很可能是 Eclipse 类路径问题,但我找不到缺少哪个库。

完整的堆栈跟踪:

javax.jms.JMSRuntimeException: Failed to create session factory
    at org.apache.activemq.artemis.jms.client.JmsExceptionUtils.convertToRuntimeException(JmsExceptionUtils.java:88)
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createContext(ActiveMQConnectionFactory.java:262)
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createContex    t(ActiveMQConnectionFactory.java:248)
    at at.cone.health.dispo.online.DispoServerFacadeImpl$JMSReceiverThread.run(DispoServerFacadeImpl.java:109)
Caused by: javax.jms.JMSException: Failed to create session factory
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:727)
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createContext(ActiveMQConnectionFactory.java:255)
    ... 2 more
Caused by: java.lang.RuntimeException: activemq-version.properties is not available
    at org.apache.activemq.artemis.utils.VersionLoader.getVersion(VersionLoader.java:87)
    at org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQClientProtocolManager.<init>(ActiveMQClientProtocolManager.java:81)
    at org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQClientProtocolManagerFactory.newProtocolManager(ActiveMQClientProtocolManagerFactory.java:49)
    at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.newProtocolManager(ServerLocatorImpl.java:575)
    at org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl.<init>(ClientSessionFactoryImpl.java:173)
    at org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:757)
    at org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory.createConnectionInternal(ActiveMQConnectionFactory.java:724)
... 3 more

我尝试设置连接的代码: InitialContextnamingContext = new InitialContext(env);

                ConnectionFactory connectionFactory = (ConnectionFactory) namingContext.lookup(CONNECTION_FACTORY);
                System.out.println("Got ConnectionFactory " + CONNECTION_FACTORY);

                destination = (Destination) namingContext.lookup(DESTINATION);

                System.out.println("Got JMS Endpoint " + DESTINATION);

                final JMSContext context = connectionFactory.createContext("internal", "internal");

                this.context = context;

                JMSConsumer consumer = context.createConsumer(destination, "client='" + clientUID + "'", true);

                // Then receive the same number of messages that were sent

该项目是基于ANT的,所以我无法使用maven依赖管理。尽管如此,服务器部分使用 Maven 构建,因此我有一个本地 Maven 存储库和一个指向 .m2 目录的 Eclipse 构建路径变量 M2_REPO。我尝试在我的 Eclipse 项目中设置库依赖项。我正在从 Eclipse 运行该项目,因此我们可以 - 首先 - 忽略 ANT 相关依赖项,并仅关注 Eclipse(但没有 Maven)。

我从我的 Maven 存储库添加了对 wildfly-client-all-10.0.0.Final.jar 的库依赖项(使用我的 M2_REPO 变量,由路径扩展)。该库在 eclipse 项目中正确显示为引用的库。

我在 eclipse maven 项目中使用相同的代码行实现了一个演示。在这里我没有遇到异常,在演示中我能够接收消息。所以我认为这是一个类路径问题。

我还在 google 和 stackoverflow 上搜索了丢失的 activemq-version.properties,但没有找到任何相关内容。我也没有找到名为 activemq-version.properties 的资源,甚至在成功执行的演示项目(及其依赖项)中也没有找到。

最佳答案

经过更多调查,我现在确实找到了原因。

在运行配置中,我有一个不同的类路径。该类路径保留了较旧的配置。在这里,我没有使用与 Maven 构建相同的 jar。运行配置包含来自 wildfly/bin/client 目录的 jboss-client.jar 和 jboss-cli-client.jar。

此配置是错误的,并导致了额外的警告,我在日志中无法识别该警告,但这也是解决方案的提示:

WARN: EJB client integration will not be available due to a problem setting up the EJB client handler

我将其更改为wildfly-client-all-10.0.0.Final.jar,它也包含在maven项目运行时中,但它再次没有解决问题。

然后我找到了这篇文章:https://developer.jboss.org/thread/267824

解决方案:回到运行时配置的第一种配置方法,使用 wildfly\bin\client 目录中的 JAR,但仅使用 jboss-cli-client.jar 而不是 jboss-client-jar。

关于java - JMS:activemq-version.properties 不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43237363/

相关文章:

java - Jetty ant任务配置

java - 如何在 Eclipse 中为方法添加注释 block ?

java - 如何检查jndi绑定(bind)/解除绑定(bind)状态?

transactions - 关于消费者选择的 JMS 单一消息确认

Java监控activemq但不轮询队列

java - 如何正确获取父 fragment 而不是父 Activity 中的 DatePicker 值

java - 我可以根据系统变量打开/关闭 CONSOLE 日志记录吗?

java - JMS MQ绑定(bind)问题

activemq - 创建activemq队列列表

java - activemq 的监控和警报