我正在尝试建立 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/