JMS:activemq-version.properties不可用

时间:2017-04-05 17:00:46

标签: java jms activemq wildfly wildfly-10

我正在尝试建立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的资源,甚至没有在成功执行它的演示项目(及其依赖项)中找到它。

1 个答案:

答案 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。