我正在尝试建立JMS连接。在connectionFactory.createContext中,我收到ActiveMQ版本加载器报告缺少属性文件的错误:
引起:java.lang.RuntimeException:activemq-version.properties不可用 在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
我尝试设置连接的代码: InitialContext namingContext = 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 repo中添加了一个库依赖项到wildfly-client-all-10.0.0.Final.jar(使用我的M2_REPO变量,由路径扩展)。该库在eclipse项目中正确显示为引用库。
我在eclipse maven项目中使用相同的代码行实现了一个演示。在这里我没有得到异常,在演示中我能够接收消息。所以我认为这是一个类路径问题。
我还在google和stackoverflow上搜索了缺少的activemq-version.properties,但没有找到任何相关内容。我也没有找到一个名为activemq-version.properties的资源,甚至没有在成功执行它的演示项目(及其依赖项)中找到它。
答案 0 :(得分:0)
经过一番调查,我现在确定了原因。
在运行配置中,我有一个不同的类路径。此类路径保留了较旧的配置。在这里,我没有使用与maven构建相同的jar。运行配置包含来自wildfly / bin / client目录的jboss-client.jar和jboss-cli-client.jar。
此配置错误,并导致我在日志中无法识别的其他警告,但这也是对解决方案的暗示:
警告:由于设置EJB客户端处理程序时出现问题,EJB客户端集成将无法使用
我将它更改为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。